2016-12-12 2 views
0

参考としてhttp://cloudinary.com/documentation/image_upload_api_referenceを使用しています。画像のバイトを雲にアップロードする正しい方法

ファイルを雲にアップロードするケースが2つあります。

  1. URLを直接リンクして画像をアップロードしてください。
  2. イメージのバイトを別のソースから取得してアップロードします。

ケース1は解決できましたが、2番目に問題がありました。参考のために私のコードフローを貼り付けています。 file paramは例えばのための任意の外部画像のURLとして非常に類似した方法でcloudinaryドキュメントで述べたようにimg_srcは、別のAPIが返す画像ブロブstrで、私はそれを通過した場合には

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 

https://media.licdn.com/mpr/mpr/shrinknp_400_400/AAEAAQAAAAAAAAIkAAAAJGRhNzJiYjY1LTUxOTctNDI4NC1hOGIwLWQ1OTVlNmZlZmVmYw.jpg

そして、 、一般的なアップロードの流れがs3のbotoのようにどのように機能するかを調べるために、私は以下のrepoコードをチェックします。 https://github.com/boto/boto/blob/develop/boto/vendored/six.py#L633も参考になりました。

エラーログ:

Invalid URL for upload Traceback (most recent call last): File "/base/data/home/apps/s~pagalguy-staging/namita:v1.397698162588746989/articleslib/article_util.py", line 68, in upload_images_n_publish tag = image_util.upload_image_to_cloudinary(tag) File "/base/data/home/apps/s~pagalguy-staging/namita:v1.397698162588746989/api/image_util.py", line 133, in upload_image_to_cloudinary crop="limit" File "/base/data/home/apps/s~pagalguy-staging/namita:v1.397698162588746989/libs/cloudinary/uploader.py", line 23, in upload_image result = upload(file, **options) File "/base/data/home/apps/s~pagalguy-staging/namita:v1.397698162588746989/libs/cloudinary/uploader.py", line 17, in upload return call_api("upload", params, file = file, **options) File "/base/data/home/apps/s~pagalguy-staging/namita:v1.397698162588746989/libs/cloudinary/uploader.py", line 226, in call_api raise Error(result["error"]["message"]) Error: Invalid URL for upload

最後に、私はcloudinaryに画像バイトをアップロードするための正しい方法であるかわかりません。

+0

"does not work"の定義は次のように試すことができます: –

+0

が 'StringIO.StringIO(img_src)'と 'io.BytesIO(img_src)'を渡そうとしましたが動作しませんでした。そして私は 'upload_image'と' upload'定義を試しました。 –

+1

大声で綴る:「うまくいかない」という定義は? 「うまくいかない」とは、問題の最も無意味な記述です。あなたが何か助けを得ることを望むなら、あなたが何を期待し、正確に起こったかを記述してください。 –

答えて

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, 
     ... 
    ) 
+0

1.はいあります:https://github.com/cloudinary/pycloudinary/blob/master/cloudinary/uploader.py#L43 2.渡されたオブジェクトがファイルのようなオブジェクト(呼び出し可能な 'read'属性)それはファイルとして使用されていますcf https://github.com/cloudinary/pycloudinary/blob/master/cloudinary/uploader.py#L234 –

+0

私に 'upload_iamge'メソッドを指摘してくれてありがとうございました。 –

関連する問題