我使用http://cloudinary.com/documentation/image_upload_api_reference作为参考。
有两种情况我想将文件上传到cloudinary。
我可以解决案例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的正确方法是什么。
答案 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,
...
)