我正在使用一个python库(poster),它以一个类似文件的对象作为参数,文档说明:
类文件对象必须支持.read()和.fileno()或两者都支持 .seek()和.tell()。在
我尝试过使用pythonopen
函数的库,它工作得很好。我当前正在使用以下方法从URL下载图像:
access_token = "XXXXXXXXXXXXXXXXXXXXX"
postPhotoUrl = "https://graph.facebook.com/me/photos?access_token=%s" % access_token
register_openers()
# get image from external URL
data = urllib2.urlopen("http://example.com/image.png")
data = StringIO(data.read())
### data, headers = multipart_encode({"source":open("file.png")}) <- WORKS FINE
data, headers = multipart_encode({"source":data})
request = urllib2.Request(postPhotoUrl,data,headers)
编辑:我的目标是从外部URL获取图像,并使用facebook图形api发布。当我使用pythonopen
函数时,我没有问题。当我尝试使用StringIO时,POST请求不会发送正文。
如果想法是使用^{} 包来进行流式HTTP上传,那么不应该将图像数据转换为PIL
Image
对象。就这样。。。在…然后可以将
data
变量传递给poster
。在当然,除非您想先用PIL转换图像,但您可能应该在您的问题中提到这一点。在
更新
至于为什么它用
StringIO
失败,可能是poster
正在检查打开的文件的文件名,并用它来确定正确的Content-Type
或类似的东西,当从StringIO
读取时,它无法做到这一点。在我从来没有使用过这个包,并且示例也不是很全面,但是当您调用类似的东西时,可能需要检查
^{pr2}$headers
变量之间的差异。。。在…与。。。在
^{3}$更新2
看来我是对的。从第168-174行的
poster
源代码中。。。在…虽然如果
filename
是None
,则可能会有其他问题。试试这个。。。在相关问题 更多 >
编程相关推荐