我正在使用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
替换为MultiPartParser
,FormParser
或同时替换两者,则request.FILES
会产生ParseError: Multipart form parse error - Invalid boundary in multipart: None
我阅读了数十篇文章,但仍然不明白
FileUploadParser
和MultiPartParser
之间的区别。 The doc指出FileUploadParser用于可上传的本机客户端 该文件作为原始数据请求。对于基于Web的上传,或者对于本机 具有分段上传支持的客户,您应该使用 改为使用MultiPartParser。