首页 > 解决方案 > Django Rest Framework:使用 FileUploadParser 保存的文件中包含的文件上传请求标头和 webkit 边界

问题描述

我目前正在尝试使用客户端和服务器端代码构建一个应用程序。我的前端是用 React 构建的,我的后端是 Python/Django,使用 django-rest-framework。

我现在正在构建的功能是文件上传功能,它利用 Dropzone.js 库在服务器上保存和存储文件。最终我想将文件路由到 AWS S3,但我还没有完成。

我的 views.py 文件当前正在接受并保存文件,但是 webKitBoundary 和文件信息也被保存在文件中。理想情况下,我希望保存文件而不必进行文件操作以删除不必要的信息。

这是我的views.py

class SaveFile(APIView):

authentication_classes = (CsrfExemptJWTAuthentication, )
parser_classes = (FileUploadParser, )  

def post(self, request, format=None):
     newFile = File()
     newFile.file = request.data['file']
     newFile.save()

    return HttpResponse('file upload success')

我的文件模型:

class File(models.Model):
   file = models.FileField(upload_to = 'files')

   def __str__(self):
      return self.file.name

   class Meta:
       db_table = "files"

我的 test.txt:

hello (.^-^),

和保存的结果:

------WebKitFormBoundaryySdQAcRrBj8kluZ5
Content-Disposition: form-data; name="file"; filename="yurrr.txt"
Content-Type: text/plain

hello (.^-^),
------WebKitFormBoundaryySdQAcRrBj8kluZ5--

我在这里发现了一个类似的问题: headers and boundary included in uploaded file django rest framework

但是,当我尝试使用 MultiPartParser 而不是 FileUploadParser 来实现建议的答案时,我的 request.data['file'] 会引发错误,因为我的 request.data 是一个空的 QueryDict。所以我什至无法处理传入的文件。

我很确定我的客户端代码很好,因为我正在使用一个非常流行的库,此外,我们可以看到文件正在保存。我更喜欢保存文件,而不是边界/请求数据。

感谢您的帮助,非常感谢!

编辑:我愿意改用 MultiPartParser,但似乎无法让它工作。无论使用什么解析器类,我的问题的任何解决方案都可以。

标签: pythondjangoreactjsfile-uploaddjango-rest-framework

解决方案


推荐阅读