使用Python requests上传文件到Django接口时文件始终为0字节求助
问题排查解决方案
1. 核心问题:文件指针位置错误
你在读取本地文件计算大小的时候,执行了testfile.seek(0, os.SEEK_END)把文件指针移动到了文件末尾,后续构造test_files的时候直接用了这个指针处于末尾的文件对象,requests上传时会从当前指针位置开始读取内容,自然读不到任何数据,导致上传的文件为0字节。
修复方法:
计算完文件大小后,把文件指针重置到文件开头即可:
testfile.seek(0, os.SEEK_END) filesize = testfile.tell() # 新增这行重置指针 testfile.seek(0)
2. 次要问题:DRF解析器配置不匹配
你当前视图配置的是parser_class = (FileUploadParser,),这个解析器仅适用于请求体整体为原始二进制文件的上传场景,而你用requests的files参数提交的是multipart/form-data格式的请求(同时携带文件和其他表单字段),解析器不匹配也可能导致文件读取异常。
修复方法:
把视图的解析器换成支持多部分表单的MultiPartParser和FormParser即可:
from rest_framework.parsers import MultiPartParser, FormParser class SaveFileUploadView(APIView): parser_classes = (MultiPartParser, FormParser) # 剩余代码保持不变
内容的提问来源于stack exchange,提问作者deMangler
相关产品推荐
相关产品推荐

