Cloudinary Python SDK设置overwrite=False仍重复上传图片问题
问题原因
overwrite参数的生效前提是你主动指定了上传资源的public_id。该参数的作用是:如果指定的public_id在你的Cloudinary资源库中已存在,overwrite=False时不会覆盖原有资源,直接返回已有数据且携带existing: true标识。你当前的代码没有指定public_id,Cloudinary每次上传都会自动生成随机的唯一public_id,两次上传的资源从标识层面就被判定为不同资源,overwrite参数不会生效,自然会生成新的资源记录。- 你贴出的代码存在语法错误:多嵌套了一层
cloudinary.uploader.upload调用,实际运行会触发语法报错,需要先修正该问题。
解决方案
- 方案1:主动指定唯一public_id
你可以提前计算待上传图片的内容哈希(如MD5、SHA1),将哈希值作为public_id传入上传接口,搭配overwrite=False即可实现相同内容图片不重复上传的需求,示例代码如下:
import hashlib import requests img_url = "https://akamai.vgc.no/drfront/images/2021/10/01/w=1080;h=710;636204.jpg" # 下载图片计算内容哈希作为唯一public_id img_content = requests.get(img_url).content img_hash = hashlib.md5(img_content).hexdigest() imagedata = cloudinary.uploader.upload( img_url, folder="vg", public_id=img_hash, overwrite=False )
- 方案2:使用Cloudinary内容去重规则
你可以在Cloudinary控制台的上传配置中开启全局内容重复检测,或者配置对应上传预设的去重规则,开启后即使不指定public_id,Cloudinary也会根据文件内容匹配已有资源,避免重复上传。
内容的提问来源于stack exchange,提问作者Bendik Knapstad
相关产品推荐
相关产品推荐

