Django SuspiciousFileOperation

时间:2019-03-27 18:22:35

标签: django django-file-upload

我有一个包含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”的意义是什么?

1 个答案:

答案 0 :(得分:0)

您可以像这样使用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