如何将 NamedTemporaryFile 保存到 Django 中的模型 FileField 中?

Posted

技术标签:

【中文标题】如何将 NamedTemporaryFile 保存到 Django 中的模型 FileField 中?【英文标题】:How do I save a NamedTemporaryFile into a model FileField in Django? 【发布时间】:2010-09-27 14:14:04 【问题描述】:

我创建了一个 NamedTemporaryFile,在其中添加了一些内容,现在我想将它保存到模型 FileField 中。

问题是我收到了 SuspiciousOperation,因为 tmp 目录不在 FileSystemStorage 目录中。

这样做的正确方法是什么?

【问题讨论】:

【参考方案1】:

您希望 django 为您检查它,因为它确保文件放在 MEDIA_ROOT 目录中,以便可以下载。

在任何情况下,您都希望将文件放在 MEDIA_ROOT 之外(在本例中为“/tmp”),您应该执行以下操作:

from django.core.files.storage import FileSystemStorage
fs = FileSystemStorage(location='/tmp')

class YourModel(models.Model):
    ...
    file_field = models.FileField(..., storage=fs)

见Django documentation

【讨论】:

【参考方案2】:

我最终采用了 romke 解释的相反方式:我正在 MEDIA_ROOT 中创建临时文件。

另一种解决方案是使用 /tmp 中的文件,然后将其移动到 MEDIA_ROOT。

我最初的困惑来自表单处理上传文件的方式:它们位于 /tmp 目录(或内存中),然后自动移动到 upload_to 目录。我在 Django 中寻找一种通用的方法。

【讨论】:

以上是关于如何将 NamedTemporaryFile 保存到 Django 中的模型 FileField 中?的主要内容,如果未能解决你的问题,请参考以下文章

Python怎么如何使用临时文件?

Python怎么如何使用临时文件?

tempfile:临时文件系统对象

Python3标准库:tempfile临时文件系统对象

如何在 Python 3 中将 CSV 编写器与 GZIP 文件一起使用?

如何将Bitmap保存为本地图片文件?