从云中销毁图像
Posted
技术标签:
【中文标题】从云中销毁图像【英文标题】:Destroy image from cloudinary 【发布时间】:2020-04-04 12:31:00 【问题描述】:当我从我的 graphql 服务器中删除图像并使用 uploader.upload.destroy(public_id) 时,它会从 cloudinary (https://cloudinary.com/console/media_library/folders/%2F) 的媒体库中删除
但图像仍然可用如果我通过云端点 (https://res.cloudinary.com/db9rcrnuw/image/upload/v1576054005/47122.png) 访问它
我想在删除图像时也销毁这些端点。
这里screen.basePath表示图片的public_Id
const screen = await ctx.prisma
.deleteScreen(
id: args.screenId
)
.$fragment(fragment);
if (scrn.basePath.length === 5)
console.log(scrn.basePath.length);
cloudinary.uploader.destroy(screen.basePath, function(error, result)
console.log(result, error);
);
return screen;
【问题讨论】:
【参考方案1】:简短的回答是,这是由于在 destroy API 调用中未使用“invalidate”参数以及 URL 格式(即版本号 (v123456789)、“v1”或没有版本号)访问资源时使用的格式与您的帐户配置为发送无效的格式。
如果您希望 CDN 失效,首先要做的是确保所有 destroy
API 调用都包含设置为“true”的“invalidate”参数。
关于 URL 格式; 作为交付 URL 的一部分的“v1576054005”是一个版本号,本质上是资产上传时间的 UNIX 时间戳。其主要目的是始终返回最新的图像并避免 CDN 缓存(上传 API 响应返回具有最新上传版本的 URL)。有关此主题的更多信息可以在这篇文章中找到 - https://support.cloudinary.com/hc/en-us/articles/202520912-What-are-image-versions。
请注意,Cloudinary 可以发送三种可能的 URL 格式以在 CDN 上进行失效,这些在此处进行了概述:https://support.cloudinary.com/hc/en-us/articles/360001208732-What-URL-conventions-are-invalidated
当您使用媒体库 UI 删除或覆盖图像时发送无效请求,或者当您使用 SDK/API 时发送无效请求,并且还提供设置为“true”的 'invalidate' 参数。
默认情况下,所有帐户都会针对 SDK 生成的默认 URL 格式发送无效信息,该格式不使用您帐户根目录中的资产的版本号,并为文件夹中的资产使用“v1”占位符(选项 1 来自上面的网址)。
如果您使用完整版组件访问图像,则默认情况下不会发送无效以及为什么您可能会返回缓存副本。
在您的情况下,发送无效的 URL 将没有版本组件(因为资源位于根文件夹中),即 https://res.cloudinary.com/db9rcrnuw/image/upload/47122.png
取决于您构建 URL 的方式,即,如果您使用 SDK 辅助方法,则从 Upload API 响应的 url
或 secure_url
字段中获取 URL(使用完整版本号) , 将确定格式,从而确定您的帐户应如何配置为无效。
我建议您向 Cloudinary 支持 (support@cloudinary.com) 发送电子邮件,并分享指向此线程的链接以及有关如何生成您使用的 URL 的一些详细信息,以便可以相应地配置您的帐户。
【讨论】:
以上是关于从云中销毁图像的主要内容,如果未能解决你的问题,请参考以下文章