DRF FileUploadParser错误地保存文件

时间:2019-09-19 08:01:07

标签: python django-rest-framework

我正在使用REST Api来上传文件,这是我的代码:

class FileUploadFromAndroidView(APIView):
    parser_classes = [FileUploadParser]

    def post(self, request, filename, format=None):

        content = request.FILES['file']
        filename_full = os.path.join(USER_FILES_DIR, filename)
        with open(filename_full, 'wb+') as destination:
            for chunk in request.FILES['file'].chunks():
                destination.write(chunk)
        return Response()

问题是由于某种原因,PDF文件被正确保存,但是图像(例如png)被错误地保存。我正在使用POSTMAN测试端点, 内容类型为multipart/form-data

如果我尝试在上面的代码中打印chunk,则会得到以下信息:

  

b'---------------------------- 229246661847068767756759 \ r \ nContent-Disposition:表单数据; name =“”;   filename =“ 22788948_2027079457526585_3335208831746267532_n.jpg” \ r \ n内容类型:   图像/ jpeg \ r \ n \ r \ n \ xff \ xd8 \ xff \ xe0 \ x00 \ x10JFIF \ x00 \ x01 \ x02 \ x00 \ x00 \ x01 \ x00 \ x01 \ x01 \ x00 \ x00 \ xff \ xed \ x00 \ x9cPhotoshop   3.0 \ x008BIM \ x04 \ x04 \ x00 \ x00 \ x00 \ x00 \ x00 \ x80 \ x1c \ x02g \ x00 \ x14zzSvDELPScNxYYSeN_jq \ x1c \ x02(\ x00bFBMD01000ac00300007f1c0000e03200004f350000fd370000b ...

如果我将FileUploadParser替换为MultiPartParserFormParser或同时替换两者,则request.FILES会产生ParseError: Multipart form parse error - Invalid boundary in multipart: None

当我尝试打开保存的文件时,得到以下信息: enter image description here

我阅读了数十篇文章,但仍然不明白FileUploadParserMultiPartParser之间的区别。 The doc指出

  

FileUploadParser用于可上传的本机客户端   该文件作为原始数据请求。对于基于Web的上传,或者对于本机   具有分段上传支持的客户,您应该使用   改为使用MultiPartParser。

0 个答案:

没有答案