首页 > 解决方案 > 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 并将其保存到后端的磁盘中。

我不敢相信我整天都在用零结果和零示例在线实际工作。

标签: django

解决方案


你没有提到你正在开发一个 REST API,但我假设你使用FormParserMultiPartParser.

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 上的其他帖子借来的,比如这个:

Django Rest 框架文件上传


推荐阅读