从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 作物不起作用?