gpt4 book ai didi

python - 上传 django rest framework api 时文件(pdf 除外)损坏

转载 作者:太空宇宙 更新时间:2023-11-04 00:08:15 25 4
gpt4 key购买 nike

嘿,我遇到了一点问题。我写了一个 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)

更新:我发现被篡改的文件中保存了额外的内容

------WebKitFormBoundaryKDALl9LeBZb6xbOoContent-Disposition:表单数据;名称="file";文件名="123.txt"内容类型:文本/纯文本

文件数据

------WebKitFormBoundaryKDALl9LeBZb6xbOo--

最佳答案

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

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

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

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

关于python - 上传 django rest framework api 时文件(pdf 除外)损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53344881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com