Django 可疑文件操作
Django SuspiciousFileOperation
我有一个包含 FileField 的模型:
class Foo(models.Model):
fileobj = models.FileField(upload_to="bar/baz")
我正在生成一个文件,并将其作为保存方法的一部分保存在 /tmp/ 中。然后需要将此文件设置为模型实例的"fileobj"。
目前,我正在尝试:
with open(
f"/tmp/{self.number}.pdf", "r"
) as h:
self.fileobj = File(h)
不幸的是,这失败了:django.core.exceptions.SuspiciousFileOperation:
,因为该文件存在于 django 项目之外。
我试过阅读文档,但帮助不大。 django 是否获取一个文件,并在将其分配为 FileField 后, 将其移动 到媒体目录,还是我需要自己手动将其放在那里,然后再将其附加到模型实例。如果是第二种情况,"upload_to"有什么意义?
您可以像这样使用 InMemoryUploadedFile
对象。
import os
import io
with open(path, 'rb') as h:
f = InMemoryUploadedFile(io.BytesIO(h.read()), 'fileobj',
'name.pdf', 'application/pdf',
os.path.getsize(path), None)
self.fileobj = f
我有一个包含 FileField 的模型:
class Foo(models.Model):
fileobj = models.FileField(upload_to="bar/baz")
我正在生成一个文件,并将其作为保存方法的一部分保存在 /tmp/ 中。然后需要将此文件设置为模型实例的"fileobj"。
目前,我正在尝试:
with open(
f"/tmp/{self.number}.pdf", "r"
) as h:
self.fileobj = File(h)
不幸的是,这失败了:django.core.exceptions.SuspiciousFileOperation:
,因为该文件存在于 django 项目之外。
我试过阅读文档,但帮助不大。 django 是否获取一个文件,并在将其分配为 FileField 后, 将其移动 到媒体目录,还是我需要自己手动将其放在那里,然后再将其附加到模型实例。如果是第二种情况,"upload_to"有什么意义?
您可以像这样使用 InMemoryUploadedFile
对象。
import os
import io
with open(path, 'rb') as h:
f = InMemoryUploadedFile(io.BytesIO(h.read()), 'fileobj',
'name.pdf', 'application/pdf',
os.path.getsize(path), None)
self.fileobj = f