你如何衡量cgi.FieldStorage实例的大小?

jav*_*vex 4 python wsgi python-2.7

上传文件时,表示它的标准方式是cgi.FieldStorage(至少金字塔这样做).但是,如果我想以有效的方式知道长度,我该如何获得它?例如:

uploaded = cgi.FieldStorage()
Run Code Online (Sandbox Code Playgroud)

如果此变量现在来自请求,如何确定文件的大小?

jav*_*vex 6

效率最低的方式是:

size = len(uploaded.value)
Run Code Online (Sandbox Code Playgroud)

更好:

uploaded.file.seek(0, 2)
size = uploaded.file.tell()
uploaded.file.seek(0)
Run Code Online (Sandbox Code Playgroud)

最好:

import os
size = os.fstat(uploaded.file.fileno()).st_size
Run Code Online (Sandbox Code Playgroud)

最后一个选项是在C中测量文件的首选方法,而Python仅代理此过程.它返回一个结构,可以告诉你各种东西,甚至是文件的大小.