参考としてhttp://cloudinary.com/documentation/image_upload_api_referenceを使用しています。画像のバイトを雲にアップロードする正しい方法
ファイルを雲にアップロードするケースが2つあります。
- URLを直接リンクして画像をアップロードしてください。
- イメージのバイトを別のソースから取得してアップロードします。
ケース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
そして、 、一般的なアップロードの流れが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に画像バイトをアップロードするための正しい方法であるかわかりません。
"does not work"の定義は次のように試すことができます: –
が 'StringIO.StringIO(img_src)'と 'io.BytesIO(img_src)'を渡そうとしましたが動作しませんでした。そして私は 'upload_image'と' upload'定義を試しました。 –
大声で綴る:「うまくいかない」という定義は? 「うまくいかない」とは、問題の最も無意味な記述です。あなたが何か助けを得ることを望むなら、あなたが何を期待し、正確に起こったかを記述してください。 –