You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 09:40:28