整个问题几乎都在标题中。
我能在班上找到的唯一文档是非常备用cgi documentation,它至少没有提到类如何接收文件,它是如何存储的,有哪些功能它支持等。
我对上传文件的存储位置非常感兴趣。显然它不在内存中,因为Bottle提到FileStorage.read()
函数对大文件是危险的。如果将它放在磁盘上,我想把它移到一个永久的位置,而不必在Python中读取它,一点一点地将它复制到一个新的位置。
但由于课程资料不佳,我不清楚从哪里开始。有什么想法吗?
答案 0 :(得分:2)
有点晚了,但我自己也在研究:
这一切都归结为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下,立即删除该文件的目录条目 创建文件后。其他平台不支持此功能;您的 代码不应该依赖于使用此函数创建的临时文件 在文件系统中是否有可见名称。
希望这有帮助。
答案 1 :(得分:0)
我希望这会有所帮助:
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
答案 2 :(得分:-1)
FieldStorage.file
属性实际上不是文件,而是cStringIO
对象,在文档上描述为内存文件:http://docs.python.org/library/stringio.html
也许这可以帮到你一点。