我创建了一个 NamedTemporaryFile,在其中添加了一些内容,现在我想将其保存到模型 FileField 中。
问题是我得到一个 SuspiciousOperation 因为 tmp 目录不在 FileSystemStorage 目录中。
这样做的正确方法是什么?
我创建了一个 NamedTemporaryFile,在其中添加了一些内容,现在我想将其保存到模型 FileField 中。
问题是我得到一个 SuspiciousOperation 因为 tmp 目录不在 FileSystemStorage 目录中。
这样做的正确方法是什么?
您希望 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)
我最终采用了 romke 解释的相反方式:我正在 MEDIA_ROOT 中创建临时文件。
另一种解决方案可能是使用 /tmp 中的文件,然后将其移动到 MEDIA_ROOT。
我最初的困惑来自表单处理上传文件的方式:它们位于 /tmp 目录(或内存中),然后自动移动到 upload_to 目录。我在 Django 中寻找一种通用的方法。