我有一个InMemoryUploadedFile对象,当我对其进行.read()
时,它会松开其内容。是否有可能从同一个对象中读取此内容两次?我试过.copy()它,但当然不应该工作。
如果不可能,我可以以某种方式将内容放回同一个对象吗?
原因:对于django形式,prevalidation()方法想要读取内容,但如果确实如此,以后我可以'保存它。这里的表现不算数。
答案 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