V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
kuno
V2EX  ›  问与答

又拍云和Python

  •  
  •   kuno · 2012-04-10 17:43:40 +08:00 · 5359 次点击
    这是一个创建于 4600 天前的主题,其中的信息可能已经有所发展或是发生改变。
    又拍云的官方python sdk似乎只支持上传python的文件对像,而不能支持其他的“类文件”对像?
    比如我用PIL库将一张原始图片剪切成我想要的大小,得到一个PIL对像。
    以前使用亚马逊的S3的时候,可以把这个PIL对像的内容写入一个StringIO对像,然后通过(bot哦里的)set_content_from_file这个方法上传,同样的方法用在这里,又拍的服务器会返回一个406的错误。
    有谁知道解决办法吗?
    4 条回复    1970-01-01 08:00:00 +08:00
    mshin
        1
    mshin  
       2012-04-10 20:05:26 +08:00
    406返回状态,把又拍云返回的具体的错误描述信息贴上来一下~
    Livid
        2
    Livid  
    MOD
       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
        3
    kuno  
    OP
       2012-04-11 10:34:55 +08:00
    @mshin
    原来的问题是计算md5数值的时候,会消耗这个StringIO对像的内容,需要把PIL对像的内容再写入一次,可以避免原来的406返回的md5不一致的问题。
    不过现在的新问题是,md5是没有问题了,可是调用writeFile这个方法之后,就卡在那里了。
    过一段时间之后抛出一个python的httplib的错误:
    BadStatusLine: ''

    @livid
    谢谢,
    我想确认一下你的代码能不能直接上传一个内存对像,而不需要先存为文件再打开,然后再上传。
    这样多读写IO各一次,感觉划不来。
    haloashen
        4
    haloashen  
       2013-01-17 20:57:45 +08:00
    我也遇到相同问题,问题解决了么?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5382 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 06:54 · PVG 14:54 · LAX 22:54 · JFK 01:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.