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

Django中FileField存入数据库的文件为空,原因是什么?

问题原因及解决办法

核心原因

使用tempfile.TemporaryFile写入JSON后,文件指针停留在文件末尾,此时调用fp.read()会读取到空内容,因为没有从文件起始位置开始读取。

修复方案

方案1:重置文件指针位置

在fp.flush()之后、fp.read()之前,添加fp.seek(0)将指针移到文件开头:

fp.flush()
fp.seek(0)  # 关键:重置文件指针到起始位置

CollectionSnapshot.objects.create(
    final=False,
    created_by=request.user,
    collection_id=collection.id,
    file=ContentFile(fp.read(), name="assets.json")
)

方案2:跳过临时文件,直接用字符串生成ContentFile

完全不需要临时文件,直接将序列化后的字典转为JSON字符串,再传入ContentFile,更简洁高效:

assets_json = json.dumps(assets)

CollectionSnapshot.objects.create(
    final=False,
    created_by=request.user,
    collection_id=collection.id,
    file=ContentFile(assets_json, name="assets.json")
)

额外排查建议

若仍怀疑json.dump静默失败,可添加异常捕获排查:

try:
    json.dump(assets, fp)
except Exception as e:
    print(f"JSON序列化失败:{e}")
    # 此处可根据业务需求抛出异常或返回错误响应

内容的提问来源于stack exchange,提问作者Felipe de Abreu Prazeres

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:10:38