django - 如何修复从 angular 7 到 django rest 的上传文件
问题描述
我用djago开发了rest api,用agular7开发了应用程序前端,当我尝试将图像与表单数据一起发送时,我尝试将图像上传到我的rest api,但api中的表单数据为空。
对于角度,我尝试使用文件发送表单数据。
Angular:
getPredictionImage(file): Observable<any> {
const HttpUploadOptions = {
headers: new HttpHeaders({ 'Content-Type': 'multipart/form-data'})
}
const f = new FormData();
f.append('image', file, file.name);
console.log(f);
return this.http.post(this.urlapiimage, file, HttpUploadOptions);
}
Django:
def post(self, request, format=None):
print("heloooo")
print(request.data)
serializer = MammographySerializer(data=request.data)
print(serializer)
if serializer.is_valid():
result='hi'
serializer.save()
return Response(result,status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
request.data 为空
解决方案
它对我有用可能是这有助于你找到你的解决方案
Angular :
upload(file): Observable<any> {
let csrftoken = getCookie('csrftoken');
let headers = new HttpHeaders({
'Access-Control-Allow-Origin': '*',
'X-CSRFToken': csrftoken,
});
const formdata = new FormData();
formdata.append("image", file); //i did not use 3rd argument file.name
let options = {
headers: headers, withCredentials :true }
return this.http.post(this.urlapiimage , formdata, options )
}
Django:
def post(self, request, format=None):
if 'file' not in request.data:
raise ParseError("Empty content ")
photo = request.data["file"]
serializer = MammographySerializer(photo = photo) // use this instead data =request.data
if serializer.is_valid():
result='hi'
serializer.save()
return Response(result,status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
在尝试了这个之后,除了你得到错误之外,阅读 DRF 解析器(https://www.django-rest-framework.org/api-guide/parsers/)
“如果您使用 chrome 并且如果 r 使用http://127.0.0.1:8000/用于 django 服务器和 localhost:4200/ 用于 angular 比因为 CORS(不同端口) chrome 不允许,那么重要的一点。使用这个 127.0.0.1: 4200/ 用于角度服务器而不是 localhost:4200/ 如果您不想这样做,请使用 firefox 而不是 chrome 它允许 CORS
推荐阅读
- realm - javascript ream.close() not closing, stopped
- string - Why does open with :w and :append still overwrite the file?
- assembly - ASSUME directive using masm
- html - 悬停时无法更改css中的背景图像
- android - Using AsyncTask with Runnable vs Creating AsyncTask Class
- angularjs - Push notifications in Android 8 using IONIC v1
- google-sheets - 如何在 Google 表格中设置双向或三向交易?
- xamarin.ios - 如何在 MDHTMLLABEL 链接中应用可访问性?
- swift - 如何将 viewModel 类注入 WKInterfaceController?
- regex - 如何设置单元格中的最大字符数并在 Google 表格中达到最大字符数时自动跳过 2 行?