又拍云和Python

2012-04-10 17:43:40 +08:00
 kuno
又拍云的官方python sdk似乎只支持上传python的文件对像,而不能支持其他的“类文件”对像?
比如我用PIL库将一张原始图片剪切成我想要的大小,得到一个PIL对像。
以前使用亚马逊的S3的时候,可以把这个PIL对像的内容写入一个StringIO对像,然后通过(bot哦里的)set_content_from_file这个方法上传,同样的方法用在这里,又拍的服务器会返回一个406的错误。
有谁知道解决办法吗?
5247 次点击
所在节点    问与答
4 条回复
mshin
2012-04-10 20:05:26 +08:00
406返回状态,把又拍云返回的具体的错误描述信息贴上来一下~
Livid
2012-04-10 21:12:28 +08:00
这是 V2EX 的 GAE 版本里上传头像文件到 UpYun 的实现方法:

u = UpYun(config.upyun_bucket, config.upyun_username, config.upyun_password)
mini = avatar_24
u.setContentMD5(md5(mini))
mini_suffix = '/avatars/mini/' + str(member.num) + '.png'
r = u.writeFile(mini_suffix, mini, True)
if r == True:
kuno
2012-04-11 10:34:55 +08:00
@mshin
原来的问题是计算md5数值的时候,会消耗这个StringIO对像的内容,需要把PIL对像的内容再写入一次,可以避免原来的406返回的md5不一致的问题。
不过现在的新问题是,md5是没有问题了,可是调用writeFile这个方法之后,就卡在那里了。
过一段时间之后抛出一个python的httplib的错误:
BadStatusLine: ''

@livid
谢谢,
我想确认一下你的代码能不能直接上传一个内存对像,而不需要先存为文件再打开,然后再上传。
这样多读写IO各一次,感觉划不来。
haloashen
2013-01-17 20:57:45 +08:00
我也遇到相同问题,问题解决了么?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/31894

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX