读取InMemoryUploadedFile两次

use*_*805 4 python django django-forms

我有一个InMemoryUploadedFile对象,当我.read()在它上面时,它会松开它的内容.是否有可能从同一个对象中读取此内容两次?我试过.copy()它,但当然不应该工作.

如果不可能,我能以某种方式将内容放回同一个对象吗?

原因是:对于django形式,prevalidation()方法想要读取内容,但如果确实如此,以后我就不能保存它.这里的表现不算数.

小智 8

只是添加@Daniel Roseman 的答案。

或者你可以直接调用my_file_obj.open()。它做同样的事情。

这是 Django 文档中的代码

    class InMemoryUploadedFile(UploadedFile):
        def open(self, mode=None):
            self.file.seek(0)
            return self
Run Code Online (Sandbox Code Playgroud)

参考https://docs.djangoproject.com/en/3.0/_modules/django/core/files/uploadedfile/


Dan*_*man 7

您应该能够调用seek(0)底层文件对象:

my_file_obj.file.seek(0)
Run Code Online (Sandbox Code Playgroud)

  • `InMemoryUploadedFile` 实现了完整的文件接口,所以你可以调用 `my_file_obj.seek(0)`。 (3认同)
  • 由于我自己偶然发现了这个问题,我只想列出一些有关此问题的背景信息。如果您 read() 文件,光标将设置到末尾,通过执行 my_file.file.seek(0) 您可以重置光标并可以再次使用 read()。 (3认同)