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

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

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

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

【问题讨论】:

    标签: django file upload model temporary-files


    【解决方案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 中寻找一种通用的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-22
        • 1970-01-01
        • 1970-01-01
        • 2020-05-27
        • 1970-01-01
        • 2011-09-08
        • 1970-01-01
        相关资源
        最近更新 更多