我正在从cgi运行python 2.4,我正在尝试使用python api上传到云服务。在php中,$ _FILE数组包含一个“tmp”元素,该文件位于文件所在的位置,直到将其放置在您想要的位置。 python中的等价物是什么?
如果我这样做
fileitem = form['file']
fileitem.filename
是文件的名称
如果我打印fileitem,则该数组只包含文件名以及看起来像文件本身的内容。
我正在尝试流式传输,并且在使用php api时需要tmp位置。
答案 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()
希望这有帮助。