我正在尝试上传这样的文件:
import pycurl
c = pycurl.Curl()
values = [
("name", "tom"),
("image", (pycurl.FORM_FILE, "tom.png"))
]
c.setopt(c.URL, "http://upload.com/submit")
c.setopt(c.HTTPPOST, values)
c.perform()
c.close()
这很好用。但是,这仅在文件是本地文件时才有效。如果我要获取图像:
import urllib2
resp = urllib2.urlopen("http://upload.com/people/tom.png")
如何将resp.fp作为文件对象传递而不是将其写入文件并传递文件名?这可能吗?
答案 0 :(得分:4)
在完美的情况下,基本上可以连接两个流,但它不是一个非常强大的解决方案。有一堆丑陋的边界条件:
暂时将文件写入磁盘然后在知道完整内容后进行POST后,你会好得多。
如果您确实想要这样做,最好的方法可能是实现您自己的类文件对象,它将管理两个连接之间的桥接(可以正确缓冲,处理解码等)。
编辑:
根据您留下的评论 - 绝对 - 您只需要设置READFUNCTION
。查看以下位置的file_upload示例:
通过在带有回调的文件对象上创建一个小包装器以从中读取数据,或者如果您不需要进行任何处理,您可以真正地设置READFUNCTION
回调。成为fp.read
。