将图像字节上传到cloudinary

时间:2016-12-12 10:02:33

标签: python cloudinary

我使用http://cloudinary.com/documentation/image_upload_api_reference作为参考。

有两种情况我想将文件上传到cloudinary。

  1. 通过直接提供网址链接上传图片。
  2. 通过从不同来源获取图像字节来上传图像字节。
  3. 我可以解决案例1,但在第二次遇到麻烦。我正在粘贴下面的代码流以供参考。

    import cloudinary
    import cloudinary.uploader
    
    from io import BytesIO
    from StringIO import StringIO
    
    def upload_image_to_cloudinary(img_tag):
    
      logging.debug("Uploading Image to cloudinary : %s"%img_tag)
    
      if 'src' not in img_tag.attrs:
        del img_tag
        return
    
      img_src = img_tag['src']
    
      if img_src.startswith('/blob'):
    
        quip_client = pgquip.get_client()
        blob_ids = img_src.split('/')
        blob_response = quip_client.get_blob(blob_ids[2], blob_ids[3])
    
        img_src_str = blob_response.read()  # this returns str object.
        # img_src = BytesIO(img_src_str)
        img_src = StringIO(img_src_str)
    
      cloudinary_response = cloudinary.uploader.upload_image(
        img_src,
        use_filename=True,
        folder="/pagalguy/articles",
        width=546,
        crop="limit"
      )
    
      img_tag['src'] = cloudinary_response.metadata.get("url")
    
      return img_tag
    

    如果img_src是另一个api返回的图片blob str,我将其作为cloud {1}}中提到的param传递给它,其方式与任何外部图片网址非常相似例如:https://media.licdn.com/mpr/mpr/shrinknp_400_400/AAEAAQAAAAAAAAIkAAAAJGRhNzJiYjY1LTUxOTctNDI4NC1hOGIwLWQ1OTVlNmZlZmVmYw.jpg

    并且,为了检查通用上传流如何像soto一样工作,我检查下面的repo代码。 提到https://github.com/boto/boto/blob/develop/boto/vendored/six.py#L633这也是。

    错误日志:

      

    上传的网址无效   Traceback(最近一次调用最后一次):     在upload_images_n_publish中输入文件“/base/data/home/apps/s~pagalguy-staging/namita:v1.397698162588746989/articleslib/article_util.py”,第68行       tag = image_util.upload_image_to_cloudinary(tag)     在upload_image_to_cloudinary中输入文件“/base/data/home/apps/s~pagalguy-staging/namita:v1.397698162588746989/api/image_util.py”,第133行       作物=“限制”     在upload_image中输入文件“/base/data/home/apps/s~pagalguy-staging/namita:v1.397698162588746989/libs/cloudinary/uploader.py”,第23行       result = upload(文件,**选项)     上传文件“/base/data/home/apps/s~pagalguy-staging/namita:v1.397698162588746989/libs/cloudinary/uploader.py”,第17行       return call_api(“upload”,params,file = file,** options)     在call_api中输入文件“/base/data/home/apps/s~pagalguy-staging/namita:v1.397698162588746989/libs/cloudinary/uploader.py”,第226行       提出错误(结果[“错误”] [“消息”])   错误:上传的网址无效

    最后,我不知道将图像字节上传到cloudinary的正确方法是什么。

1 个答案:

答案 0 :(得分:0)

您的img_src参数(代表file)应填充字节数组缓冲区(bytearray)或Base64 URI。您可以尝试以下方式:

    with open(img_src_str, "rb") as imageFile:
      f = imageFile.read()
      img_src = bytearray(f)

    cloudinary_response = cloudinary.uploader.upload(
      img_src,
      ...
    )