上载Django restframework api

时间:2018-11-16 20:25:23

标签: python django django-rest-framework

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

1 个答案:

答案 0 :(得分:3)

FileUploadParser假设传入的请求是原始字节流,并将其整体解析。通常在parser_classes中是listed on its own,因为它将针对任何类型的传入数据激活。

您所发生的情况是,您正在发送由FileUploadParser接收的多部分请求,整个内容-边界和全部-保存为文件。因此,您会在文件中看到WebKitFormBoundary

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

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