2014-09-06 9 views
1

werkzeug.datastructures.FileStorage 클래스의 객체 ("img")가 있습니다 (이 객체는 파일을 나타냅니다). 이 파일을 디스크에 저장해야합니다. 나는 다음과 같은 방법으로 그것을 할 수있다 :파일 객체를 파괴하지 않고 파일 객체의 크기를 어떻게 확인할 수 있습니까?

img.save(fname) 

그것은 잘 동작한다. 그러나 파일을 저장하기 전에 크기를 확인해야합니다. 나는 다음과 같은 방법으로 그것을한다.

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

잘 작동한다. 하지만 문제는 파일 크기를 확인한 후에 파일을 저장할 수 없다는 것입니다. 또는 더 정확하게는 디스크에 파일을 가져 오지만 이전에 크기를 확인한 경우에는 비어 있습니다.

파일을 "파괴하지 않고 파일의 크기를 어떻게 확인할 수 있습니까?

+0

os.stat 또는 os.path.getsize (경로)를 사용하면 어떻습니까? – felipsmartins

+0

'os.stat (value) .st_size'를 사용하면 다음과 같은 메시지가 나타납니다 :'TypeError : 유니 코드로 강제 변환 : 문자열 또는 버퍼가 필요합니다. FileStorage를 찾았습니다. ' – Roman

답변

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)