从cloudinary删除带有完整url的图像不起作用-Node.js

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从cloudinary删除带有完整url的图像不起作用-Node.js相关的知识,希望对你有一定的参考价值。

[我正在尝试通过我的Express应用程序从cloudinary中删除图像,仅当我缩短URL使其与我创建的cloudinary文件夹匹配时,此方法才有效

pictures : "Images/zebre_s2gtto"

我的图片的完整网址是

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

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

[当我想从cloudinary和我的数据库中删除图像时,如果我提到完整的url,则从我的数据库中删除该图像,但不在cloudinary中,如果我提到从cloudinary的短网址,则从cloudinary中删除该图像,但是该网址未从我的数据库中删除,因为mongo正在等待图像的完整网址,而cloudinary则要求缩短网址。

我的猫鼬模式

{
  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方法的邮递员测试

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

答案
无法通过URL从Cloudinary中删除资源,您需要使用public_id(即您所指的“短URL”)。最常见的工作流程是将public_id存储在数据库中,因为它用于所有API操作(删除,更新等)。对于URL生成,您可以使用public_id并将其传递到Cloudinary SDK帮助程序方法中,该方法在本地构造URL并将URL输出到资产。也可以为这些方法提供任何一组转换选项。请参见以下部分,以获取每个SDK的示例-https://cloudinary.com/documentation/image_transformations#embedding_images_in_web_pages

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

以上是关于从cloudinary删除带有完整url的图像不起作用-Node.js的主要内容,如果未能解决你的问题,请参考以下文章

使用 node.js 的 cloudinary 作物不起作用?

如何使用自定义 url 和文件夹将图像上传到 cloudinary

cloudinary的销毁方法没有反应

从 cloudinary 中删除从客户端上传的未签名图像

如何将图像上传到 Cloudinary - MERN 堆栈

Cloudinary REST api 销毁不起作用? [关闭]