整个问题几乎都在标题中。
我可以在该类上找到的唯一文档是非常节省的cgi 文档,它至少没有提到该类如何接收文件、它是如何存储的、它支持什么功能等。
我对上传文件的存储位置非常感兴趣。显然它不在内存中,因为Bottle提到该FileStorage.read()
功能对大文件很危险。如果它放在磁盘上,我想将它移动到一个永久位置,而不必在 Python 中通读它,将它一点一点地复制到一个新位置。
但是由于课程的文档很差,我不知道从哪里开始。有任何想法吗?
有点晚了,但我自己调查了一下:
这一切都归结为 cgi.py 中的“make_file”方法:
def make_file(self, binary=None):
import tempfile
return tempfile.TemporaryFile("w+b")
tempfile 文档 ( http://docs.python.org/2/library/tempfile.html ) 表明该文件是在从与平台相关的列表中选择的默认目录中创建的,但用户可以通过以下方式控制目录位置设置环境变量之一:TMPDIR、TEMP 或 TMP。
另请注意文档:
在 Unix 下,文件的目录条目在文件创建后立即被删除。其他平台不支持;您的代码不应依赖于使用此函数创建的临时文件,该文件在文件系统中具有或不具有可见名称。
希望这可以帮助。
我希望这会有所帮助:
http://epydoc.sourceforge.net/stdlib/cgi.FieldStorage-class.html
cgi.FieldStorage()
有
还有别的……你可以在文档中阅读。
这是我的代码:
f_sd=open(tempfilesd,'r+b')
newdata_sd = cgi.FieldStorage()
newdata_sd.filename='sdfile.jpg'
newdata_sd.name='file'
newdata_sd.file=f_sd
form.vars.file = newdata_sd
该FieldStorage.file
属性实际上不是文件而是cStringIO
对象,在文档上描述为内存文件: http: //docs.python.org/library/stringio.html
也许这可以帮助你一点。