嘿,我有一个问题。我写了一个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 =“文件”; filename =“ 123.txt” 内容类型:文本/纯文本
文件数据
-WebKitFormBoundaryKDALl9LeBZb6xbOo-
答案 0 :(得分:3)
FileUploadParser
假设传入的请求是原始字节流,并将其整体解析。通常在parser_classes
中是listed on its own,因为它将针对任何类型的传入数据激活。
您所发生的情况是,您正在发送由FileUploadParser
接收的多部分请求,整个内容-边界和全部-保存为文件。因此,您会在文件中看到WebKitFormBoundary
。
您应该从FileUploadParser
中删除parser_classes
,并让MultiPartParser
正确解析多部分请求。
class UploadInvoiceFile(APIView):
parser_classes = (MultiPartParser, )