如何在不损坏文件对象的情况下检查其大小?
我有一个叫“img”的对象,它属于 werkzeug.datastructures.FileStorage
这个类(这个对象代表一个文件)。我需要把这个文件保存到磁盘上。我可以这样做:
img.save(fname)
这样做是没问题的。但是在我保存文件之前,我需要先检查一下它的大小。我是这样检查的:
img.seek(0, os.SEEK_END)
size = img.tell()
这样也没问题。但是问题是,在我检查文件大小之后,我就无法再保存这个文件了。更准确地说,如果我在检查大小之后再保存文件,磁盘上会出现一个空文件。
我该如何检查文件大小而不“破坏”它呢?
3 个回答
2
Werkzeug的FileStorage有一个叫做content_length
的属性。这个属性用来表示文件的大小,具体可以参考这个链接:http://werkzeug.pocoo.org/docs/0.10/datastructures/#werkzeug.datastructures.FileStorage.content_length
img.content_length
2
可以用下面的代码替换掉原来的 seek 和 tell:
import os
img.flush()
size = os.fstat(img.fileno()).st_size
8
你在保存文件之前忘了把文件指针移到开头,所以保存的文件是空的。
#seek to the end of the file to tell its size
img.seek(0, os.SEEK_END)
size = img.tell()
#seek to its beginning, so you might save it entirely
img.seek(0)
img.save(fname)