如何在不损坏文件对象的情况下检查其大小?

4 投票
3 回答
3167 浏览
提问于 2025-04-20 03:19

我有一个叫“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)

撰写回答