如何通过PHP删除Cloudinary图片?调用destroy返回ok但图片仍可访问
Cloudinary 删除资源返回 ok 但仍可访问的解决方法
你现有代码的基础调用逻辑没有问题,接口返回 ok 说明接口鉴权、参数格式都符合要求,出现删除后资源仍可访问的情况,通常是以下几个原因导致的:
- 没有配置
invalidate生效参数
destroy 方法默认不会主动触发 CDN 缓存失效,就算源站资源已经被删除,Cloudinary 全球边缘节点的缓存还会保留最长30天,在缓存过期前访问资源还是会正常返回。你需要在调用时显式传入invalidate设为 true,主动提交缓存失效请求:
注意缓存失效不是实时生效,通常需要5-10分钟左右全球节点才能完成同步。$cloudinary = new Cloudinary($config); return $cloudinary->uploadApi()->destroy($file_id, [ 'invalidate' => true ]); - 资源类型不匹配
destroy 方法默认只会处理image类型的资源,如果你要删除的是视频、普通文件(raw 类型),需要额外指定resource_type参数,否则接口找不到对应资源就会返回空成功,不会执行实际删除操作:
比如删除视频的写法:
删除普通非媒体文件就把参数值换成return $cloudinary->uploadApi()->destroy($file_id, [ 'resource_type' => 'video', 'invalidate' => true ]);raw即可。 - 资源 ID 缺少完整路径前缀
如果你的资源是存放在指定文件夹下的,传入的$file_id需要带上完整的路径前缀,比如资源存放在avatar/ordinary目录下,不能只传文件名作为 ID,需要传入完整的avatar/ordinary/xxx才能匹配到对应资源。 - 开启了软删除配置
如果你的 Cloudinary 账号开启了软删除功能,调用 destroy 方法只会把资源移入回收站,不会立刻永久删除,资源的原访问链接还是可以正常打开,需要到后台回收站手动清空,或者调用永久删除接口才会真正清理资源。
内容的提问来源于stack exchange,提问作者Čamo
相关产品推荐
相关产品推荐

