从 cloudinary 中删除完整 url 的图像不起作用 - Nodejs

Delete image with full url from cloudinary not working - Nodejs

我正在尝试通过我的 Express 应用程序从 cloudinary 中删除图像,只有当我缩短 url 以匹配我创建的 cloudinary 文件夹时它才有效

pictures : "Images/zebre_s2gtto"

我的图像的完整 url 是

https://res.cloudinary.com/beloved/image/upload/v1589562378/Images/zebre_s2gtto.jpg

主要问题是图像 url 存储在数据库中并包含完整图像 url。

当我想从 cloudinary 和我的数据库中删除图像时,如果我提到完整 url,图像将从我的数据库中删除,但不会从 cloudinary 中删除,如果我提到短 [=31] =] 来自 cloudinary,图像已从 cloudinary 中删除,但 url 未从我的数据库中删除,因为 mongo 正在等待图像的完整 url,而 cloudinary 需要缩短的 url.

我的 mongoose 模式

{
  pictures : Array
}

我想做什么

deletePictures = async (req, res) => {
  const img = req.body.pictures
  try {
    await cloudinary.v2.uploader.destroy(
      img, { invalidate: true, resource_type: "image" }, async (error, result)=> {
      if (error){
        return res.status(400).json(error)
      }
       await  Property.updateOne({$pull : { pictures: img }});
      res.json(result)
      })
  }
  catch (e) {
    res.status(500).json('Something went wrong')
  }
};

使用 PUT 方法的 postman 测试

{
    "pictures" : "https://res.cloudinary.com/beloved/image/upload/v1589562378/Images/zebre_s2gtto.jpg"
}

无法通过 URL 从 Cloudinary 删除资源,您需要使用 public_id (i.e. the 'short URL' you refer to). The most common workflow is to store the public_id in your database as that is used for all API operations (delete, update etc). For URL generation, you can use the public_id and pass that into the Cloudinary SDK helper methods which construct the URLs locally and output the URL to the asset. These methods can be given any set of transformations options too. Please see the following section for examples for each SDK - https://cloudinary.com/documentation/image_transformations#embedding_images_in_web_pages

我建议您不再存储 URL 并更新您的数据库以引用并保留 public_id。您可以 运行 一次性脚本从现有 URL 中提取 public_id,然后相应地更新当前记录的架构。对于新上传,您可以直接从 API 响应中获取 public_id 参数。

嗯,对我来说,我将 public_id 和 url 都存储在数据库中,这样我就可以灵活地进行查询和检查,而不仅仅是存储 public_id 然后每次我需要 url.

时都使用 Cloudinary SDK 辅助方法