2014-09-06 95 views
1

我有一個werkzeug.datastructures.FileStorage類的對象(稱爲「img」)(此對象表示一個文件)。我需要將此文件保存在磁盤上。我可以這樣做:如何檢查文件對象的大小而不破壞它?

img.save(fname) 

它工作正常。但在保存文件之前,我需要檢查它的大小。我這樣做的方式如下:

img.seek(0, os.SEEK_END) 
size = img.tell() 

它的工作也很好。但問題是我檢查了它的大小後無法保存文件。或者,更確切地說,我在磁盤上得到一個文件,但是如果我以前檢查過它的大小,它就是空的。

如何在不「銷燬」的情況下檢查文件的大小?

+0

如果使用os.stat或os.path.getsize(path)會怎麼樣? – felipsmartins 2014-09-06 05:51:14

+0

如果我使用'os.stat(value).st_size',我得到:'TypeError:強制轉換爲Unicode:需要字符串或緩衝區,找到FileStorage' – Roman 2014-09-06 06:13:33

回答

1

而不是尋求並告訴它改爲:

import os 
img.flush() 
size = os.fstat(img.fileno()).st_size 
2

你忘了徵求文件的開頭保存之前,因此空文件

#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)