django - POSTMAN -> DJANGO -- 上传二进制文件 (jpeg)。无论我做什么都无法让它工作
问题描述
简化:
curl --location --request PUT 'https://myserver.com/upload' \
--form 'file=@/Users/myname/Desktop/bond.jpg' \
--form 'test=test'
它进入我的 Django 应用程序:
class MyUploadView(APIView):
parser_classes = [FormParser, MultiPartParser]
def put(self, request, **kwargs):
print(request.FILES)
但给出:<MultiValueDict: {}>
我什么都不做,文件总是空的。当我使用Content-Type: multipart/form-data
它时效果不佳,有时django
会抱怨没有boundary
- 但是那里的任何值都会给出相同的错误。
我的目标很简单: 我只希望它将文件上传到 django 并将其保存到后端的磁盘中。
我不敢相信我整天都在用零结果和零示例在线实际工作。
解决方案
你没有提到你正在开发一个 REST API,但我假设你使用FormParser
和MultiPartParser
.
在Django REST 框架的示例中,它使用的request.data['file']
方式request.FILES
与您在代码中使用的不同。
尝试将您的方法更改为
def put(self, request, **kwargs):
print(request.data['file'])
看看你是否得到任何输出。
要保存上传的文件,您可以这样做:
def put(self, request, **kwargs):
uploaded_file = request.data['file']
destination = open('/Users/Username/' + uploaded_file.name, 'wb+')
for chunk in uploaded_file.chunks():
destination.write(chunk)
destination.close()
return Response(uploaded_file.name, status.HTTP_201_CREATED)
这段代码是从 SO 上的其他帖子借来的,比如这个:
推荐阅读
- jakarta-ee - 为什么容器在各个会话之间共享我的 EJB 有状态会话 bean?
- javascript - HTML 代码未加载列表框中的数据
- python - 即使安装在我的电脑上,BeautifulSoup 导入也不适用于 vscode
- powershell - Get-ADUser 错误,名称不是过滤器的参数
- python - Discord.py 添加角色
- julia - 减少DifferentialEquations.jl 中的内存分配
- typescript - 使用名称 [object FormData] 创建的文件,但它必须是 Name Delivery.xlsx
- javascript - 如何在 JavaScript 中正确初始化子函数?
- mongodb - MongoDB 查询过滤器
- git - 无法使 git push