Django文件上传调用InMemoryUploadedFile.save报AttributeError错误
报错原因
运行时抛出的异常信息:
Exception Type: AttributeError Exception Value: 'InMemoryUploadedFile' object has no attribute 'save'
触发场景是直接调用request.FILES取出的上传文件对象的save()方法,本质是因为Django的InMemoryUploadedFile是内存中的文件流对象,本身没有实现写入本地磁盘的save()方法,因此调用会报属性不存在的错误。
最简修复方案
不需要依赖Django的Form、Model等封装组件,直接手动将文件流写入本地磁盘即可,兼顾大文件内存安全的最简写法:
from django.http import HttpResponse def upload(request): file = request.FILES["picture"] # 二进制写模式打开本地目标文件 with open("hello.png", "wb+") as target_f: # 分块读取上传文件内容写入,避免大文件占满内存 for chunk in file.chunks(): target_f.write(chunk) return HttpResponse("done uploading")
如果仅做本地小文件上传测试,还可以压缩成更短的写法:
from django.http import HttpResponse def upload(request): open("hello.png", "wb").write(request.FILES["picture"].read()) return HttpResponse("done uploading")
提示:以上极简写法未包含文件类型校验、存储路径安全校验、重名文件覆盖逻辑,仅适合快速调试场景使用,正式环境请补充对应安全校验规则。
内容的提问来源于stack exchange,提问作者Waseem Saeed
相关产品推荐
相关产品推荐

