cgi.FieldStorage类如何处理文件上传?

时间:2012-06-15 21:36:44

标签: python file-upload

整个问题几乎都在标题中。

我能在班上找到的唯一文档是非常备用cgi documentation,它至少没有提到类如何接收文件,它是如何存储的,有哪些功能它支持等。

我对上传文件的存储位置非常感兴趣。显然它不在内存中,因为Bottle提到FileStorage.read()函数对大文件是危险的。如果将它放在磁盘上,我想把它移到一个永久的位置,而不必在Python中读取它,一点一点地将它复制到一个新的位置。

但由于课程资料不佳,我不清楚从哪里开始。有什么想法吗?

3 个答案:

答案 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

也许这可以帮到你一点。