Python 上载django restframework api时文件(PDF除外)损坏
嘿,我有点问题。我编写了一个django restframework api,用于将文件上载到本地目录。当涉及到PDF时,它似乎工作得非常好,但是任何其他类型的格式都会损坏文件并使其无法打开 (包括png/jpg/任何其他图片格式、txt文件、xlsx文件等) 这些文件保存在正确的路径中,命名正确,没有问题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)
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, )
谢谢你的评论。我偶然发现了这个,并意识到它回答了我在这里发布的问题:谢谢。布莱利安!这就解决了我所有的问题。谢谢