Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 上载django restframework api时文件(PDF除外)损坏_Python_Django_Django Rest Framework - Fatal编程技术网

Python 上载django restframework api时文件(PDF除外)损坏

Python 上载django restframework api时文件(PDF除外)损坏,python,django,django-rest-framework,Python,Django,Django Rest Framework,嘿,我有点问题。我编写了一个django restframework api,用于将文件上载到本地目录。当涉及到PDF时,它似乎工作得非常好,但是任何其他类型的格式都会损坏文件并使其无法打开 (包括png/jpg/任何其他图片格式、txt文件、xlsx文件等) 这些文件保存在正确的路径中,命名正确,没有问题 class UploadInvoiceFile(APIView): parser_classes = (FileUploadParser, MultiPartParser)

嘿,我有点问题。我编写了一个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--

文件上传解析器假定传入的请求是原始字节流,并将其作为一个整体进行解析。它通常在
parser\u类中
,因为它将为任何类型的传入数据激活

在您的情况下,您正在发送一个由
FileUploadParser
拾取的多部分请求,而整个内容-边界和所有-都保存为一个文件。因此,您可以在文件中看到
WebKitFormBoundary

您应该从
parser\u classes
中删除
FileUploadParser
,让
MultiPartParser
正确解析多部分请求

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

谢谢你的评论。我偶然发现了这个,并意识到它回答了我在这里发布的问题:谢谢。布莱利安!这就解决了我所有的问题。谢谢