前端通过FormData传文件至Django,后端获取文件对象失败如何解决?
问题解答
为什么获取到的file为None?
Django中,通过multipart/form-data格式(也就是FormData)上传的文件对象,不会被存放在request.POST里——request.POST仅用于存放普通文本表单字段(比如你这里的metadata)。文件类型的字段会单独存放在request.FILES对象中,所以用request.POST.get("file")自然拿不到值,返回None。
正确获取文件对象的方法
直接从request.FILES中获取文件即可,修改后端视图函数代码:
@api_view(["POST"]) def jobs(request): metadata = request.POST.get("metadata") file = request.FILES.get("file") # 改为从request.FILES获取 print(metadata) print(file) # 现在能拿到文件对象了 # 可选:处理文件的示例代码 if file: # 读取文件二进制内容 file_content = file.read() # 或者将文件保存到本地 with open(f"./{file.name}", "wb") as save_file: save_file.write(file_content)
额外补充前端注意点:axios在传入FormData时会自动设置正确的Content-Type(带boundary的multipart/form-data),不要手动在请求配置里硬写headers: {'Content-Type': 'multipart/form-data'},否则可能导致后端无法正确解析文件。
内容的提问来源于stack exchange,提问作者whitebear
相关产品推荐
相关产品推荐

