Django中如何将上传的InMemoryUploadedFile保存为磁盘临时文件
解决Django上传图片保存后损坏的问题
你遇到的问题是因为使用ContentFile(data.read())处理二进制图片内容时,触发了不必要的编码转换,导致文件内容异常(虽然大小一致,但图片结构损坏)。以下两种方法可以解决:
方法一:直接保存上传的文件对象
request.FILES['image']返回的InMemoryUploadedFile本身兼容Django的存储API,不需要用ContentFile包装,直接传入即可:from django.core.files.storage import default_storage from django.conf import settings import os data = request.FILES['image'] path = default_storage.save('tmp/%s' % filename, data) tmp_file = os.path.join(settings.MEDIA_ROOT, path)方法二:手动分块写入二进制文件
直接通过文件系统操作写入二进制流,避免存储层的潜在处理问题,同时支持大文件上传:from django.conf import settings import os data = request.FILES['image'] tmp_dir = os.path.join(settings.MEDIA_ROOT, 'tmp') os.makedirs(tmp_dir, exist_ok=True) # 确保目标目录存在 tmp_file = os.path.join(tmp_dir, filename) with open(tmp_file, 'wb') as f: for chunk in data.chunks(): f.write(chunk)
内容的提问来源于stack exchange,提问作者Simon Steinberger
相关产品推荐
相关产品推荐

