首页 > 解决方案 > 从云中销毁图像

问题描述

当我从我的 graphql 服务器中删除图像并使用 uploader.upload.destroy(public_id) 时,它会从 cloudinary 的媒体库中删除(https://cloudinary.com/console/media_library/folders/%2F

但图像仍然可用如果我通过 cloudinary 端点访问它(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;
      }

标签: graphqlcloudinaryprismaexpress-graphql

解决方案


简短的回答是,这是由于在您的destroy API 调用中未使用“invalidate”参数以及哪种 URL 格式(即带有版本号 (v123456789)、“v1”或没有版本号)之间的差异造成的使用与您的帐户配置为发送无效的格式来访问资源。

destroy如果您希望 CDN 失效,首先要做的是确保所有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-无效

当您使用媒体库 UI 删除或覆盖图像时,或者当您使用 SDK/API 并提供设置为“true”的“invalidate”参数时,会发送失效请求。

默认情况下,所有帐户都会针对 SDK 生成的默认 URL 格式发送无效,该格式不使用您帐户根目录中的资产的版本号,并为文件夹中的资产使用“v1”占位符(上面 URL 中的选项 1) .

如果您正在使用完整版组件访问图像,那么默认情况下不会发送无效以及为什么您可能会返回缓存副本。

在您的情况下,发送无效的 URL 将没有版本组件(因为资源位于根文件夹中),即 https://res.cloudinary.com/db9rcrnuw/image/upload/47122.png

根据您构建 URL 的方式,即,如果您使用 SDK 辅助方法,则从 Upload API 响应的urlorsecure_url字段中获取 URL(使用完整版本号),将确定格式,从而确定您的帐户应配置为无效。

我建议您向 Cloudinary 支持 (support@cloudinary.com) 发送电子邮件,并分享指向此线程的链接以及有关如何生成您使用的 URL 的一些详细信息,以便可以相应地配置您的帐户。


推荐阅读