上载Django restframework api时文件(PDF除外)已损坏

2024-09-30 20:17:08 发布

您现在位置:Python中文网/ 问答频道 /正文

嘿,我有点问题。我编写了一个django restframework api,用于将文件上载到本地目录。当涉及到PDF时,它似乎工作得非常好,但是任何其他类型的格式都会损坏文件并使其无法打开。你知道吗

(包括png/jpg/任何其他图片格式、txt文件、xlsx文件等) 这些文件保存在正确的路径中非常好,它们的命名是恰当的,没有问题。你知道吗

class UploadInvoiceFile(APIView):
     parser_classes = (FileUploadParser, MultiPartParser)

     def put(self, request, filename, specific_path='admin'):
         file_obj = request.data['file']
         file_path = settings.INVOICE_URL[admin]
         file = file_path+'/'+filename

         if not os.path.exists(file_path):
             os.makedirs(file_path)
         with open(file, 'wb+') as destination:
             for chunk in file_obj.chunks():
                 destination.write(chunk)



         return Response(status=204)

更新: 我发现当前选择的文件中保存了其他内容

----WebKitFormBoundaryKDALl9LeBZb6xbOo 内容处理:表单数据;name=“file”;filename=“123.txt” 内容类型:文本/纯文本

文件数据

----WebKitFormBoundaryKDALl9LeBZb6xbOo--


Tags: 文件数据pathtxtobj类型内容admin
1条回答
网友
1楼 · 发布于 2024-09-30 20:17:08

FileUploadParser假定传入请求是原始字节流,并将其作为一个整体进行解析。它通常在parser_classeslisted on its own,因为它将为任何类型的传入数据激活。你知道吗

在您的例子中,您发送的是一个多部分请求,它被FileUploadParser接收,整个东西-边界和所有-保存为一个文件。因此您可以在文件中看到WebKitFormBoundary。你知道吗

您应该从parser_classes中删除FileUploadParser,并让MultiPartParser正确解析多部分请求。你知道吗

class UploadInvoiceFile(APIView):
     parser_classes = (MultiPartParser, )

相关问题 更多 >