读取InMemoryUploadedFile两次

时间:2017-06-23 13:39:11

标签: python django django-forms

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

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

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

3 个答案:

答案 0 :(得分:6)

您应该能够在基础文件对象上调用seek(0)

my_file_obj.file.seek(0)

答案 1 :(得分:0)

只需添加到@Daniel Roseman答案即可。

或者您也可以调用 my_file_obj.open()。 它做同样的事情。

这是Django文档中的代码

    class InMemoryUploadedFile(UploadedFile):
        def open(self, mode=None):
            self.file.seek(0)
            return self

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

答案 2 :(得分:0)

我正在从文件源 InMemoryUploadedFile 对 s3 执行写操作。这是我要在 s3 对象上写入的文件缓冲区的捕获,它在读取后关闭文件。如果我要寻找但它是不可寻找的对象。

https://github.com/boto/boto3/issues/256

所以在python中有一个deepcopy我做了一个对象的副本,现在我有两个带有不同缓冲区读取器的对象

file_obj1 = copy.deepcopy(file_obj)
buffer1 = file_obj.file
buffer2 = file_obj1.file

这里的 file_obj 是一个 InMemoryUploadedFile

相关问题