V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
kuno
V2EX  ›  问与答

又拍云和Python

  •  
  •   kuno · Apr 10, 2012 · 6162 views
    This topic created in 5140 days ago, the information mentioned may be changed or developed.
    又拍云的官方python sdk似乎只支持上传python的文件对像,而不能支持其他的“类文件”对像?
    比如我用PIL库将一张原始图片剪切成我想要的大小,得到一个PIL对像。
    以前使用亚马逊的S3的时候,可以把这个PIL对像的内容写入一个StringIO对像,然后通过(bot哦里的)set_content_from_file这个方法上传,同样的方法用在这里,又拍的服务器会返回一个406的错误。
    有谁知道解决办法吗?
    4 replies    1970-01-01 08:00:00 +08:00
    mshin
        1
    mshin  
       Apr 10, 2012
    406返回状态,把又拍云返回的具体的错误描述信息贴上来一下~
    Livid
        2
    Livid  
    MOD
    PRO
       Apr 10, 2012
    这是 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
       Apr 11, 2012
    @mshin
    原来的问题是计算md5数值的时候,会消耗这个StringIO对像的内容,需要把PIL对像的内容再写入一次,可以避免原来的406返回的md5不一致的问题。
    不过现在的新问题是,md5是没有问题了,可是调用writeFile这个方法之后,就卡在那里了。
    过一段时间之后抛出一个python的httplib的错误:
    BadStatusLine: ''

    @livid
    谢谢,
    我想确认一下你的代码能不能直接上传一个内存对像,而不需要先存为文件再打开,然后再上传。
    这样多读写IO各一次,感觉划不来。
    haloashen
        4
    haloashen  
       Jan 17, 2013
    我也遇到相同问题,问题解决了么?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   935 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 20:31 · PVG 04:31 · LAX 13:31 · JFK 16:31
    ♥ Do have faith in what you're doing.