python upload - tmp / FILES在哪里?

时间:2009-02-18 18:27:22

标签: python upload cgi mosso

我正在从cgi运行python 2.4,我正在尝试使用python api上传到云服务。在php中,$ _FILE数组包含一个“tmp”元素,该文件位于文件所在的位置,直到将其放置在您想要的位置。 python中的等价物是什么?

如果我这样做

fileitem = form['file']

fileitem.filename是文件的名称

如果我打印fileitem,则该数组只包含文件名以及看起来像文件本身的内容。

我正在尝试流式传输,并且在使用php api时需要tmp位置。

2 个答案:

答案 0 :(得分:2)

该文件是一个真实的文件,但cgi.FieldStorage一旦创建就将其取消链接,只要它保持打开状态就会存在,并且文件系统上不再有真正的路径

然而,你可以改变这个......

您可以扩展cgi.FieldStorage并替换make_file方法,将文件放在任何位置:

import os
import cgi

class MyFieldStorage(cgi.FieldStorage):
    def make_file(self, binary=None):
        return open(os.path.join('/tmp', self.filename), 'wb')

您还必须记住,FieldStorage对象只有在收到超过1000B的情况下才创建真实文件(否则它是cStringIO.StringIO

编辑cgi模块实际上使用tempfile模块生成文件,因此如果您需要大量细节,请检查一下。

答案 1 :(得分:1)

以下是从我的网站获取的代码段:

h = open("user_uploaded_file", "wb")
while 1:
    data = form["file"].file.read(4096)
    if not data:
        break
    h.write(data)
h.close()

希望这有帮助。