node.js - 如何通过 Node.js Express 从 Cloudinary 中删除图像?
问题描述
上传和设置默认控制器功能运行良好。但是,我们也在尝试从 Cloudinary 中实现删除图像。怎么做到呢?在文档中它令人困惑。这是代码:
const cloudinary = require('cloudinary');
const HttpStatus = require('http-status-codes');
const User = require('../models/userModels');
cloudinary.config({
cloud_name: 'name',
api_key: 'key',
api_secret: 'secret'
});
module.exports = {
UploadImage(req, res) {
cloudinary.uploader.upload(req.body.image, async result => {
await User.update(
{
_id: req.user._id
},
{
$push: {
images: {
imgId: result.public_id,
imgVersion: result.version
}
}
}
)
.then(() =>
res
.status(HttpStatus.OK)
.json({ message: 'Image uploaded successfully' })
)
.catch(err =>
res
.status(HttpStatus.INTERNAL_SERVER_ERROR)
.json({ message: 'Error uploading image' })
);
});
},
DeleteImage(req, res) {
cloudinary.uploader.destroy(req.params.image, async result => {
await User.update(
{
_id: req.user._id
},
{
$pull: {
images: {
imgId: result.public_id,
imgVersion: result.version
}
}
}
)
.then(() =>
res
.status(HttpStatus.OK)
.json({ message: 'Image deleted successfully' })
)
.catch(err =>
res
.status(HttpStatus.INTERNAL_SERVER_ERROR)
.json({ message: 'Error deleting image' })
);
});
},
async SetDefaultImage(req, res) {
const { imgId, imgVersion } = req.params;
await User.update(
{
_id: req.user._id
},
{
picId: imgId,
picVersion: imgVersion
}
)
.then(() =>
res.status(HttpStatus.OK).json({ message: 'Default image set' })
)
.catch(err =>
res
.status(HttpStatus.INTERNAL_SERVER_ERROR)
.json({ message: 'Error occured' })
);
}
};
我们将 Node.js Express 与 Mongoose 一起使用。我们如何在此处包含将删除图像的额外功能?
解决方案
有两个选项可以从 cloudinary 中删除图像:
- 通过使用管理 API。例如在节点中:
cloudinary.v2.api.delete_resources(['image1', 'image2'],
function(error, result){console.log(result);});
- 使用我们的上传 API:
cloudinary.v2.uploader.destroy('sample', function(error,result) {
console.log(result, error) });
请注意,使用我们的管理 API 受到速率限制,您可能希望使用第二个选项。
推荐阅读
- spring-batch - Spring Batch:跳过异常未按预期运行
- c++ - 如何在“=”的另一侧使“=”重载工作
- linux - 使用 sudo su - user 登录新用户后,命令不会传递到 CLI
- machine-learning - 如何随机创建异常数据集?
- simulation - 如何在 AnyLogic 中按名称连接代理?
- html - 为什么我的注销链接在我的 Django 应用程序中不起作用?
- gerrit - 在 Gerrit 中查看代码差异时,是否可以隐藏注释?
- excel - 使用 Excel 和 VBA 打开文件(在 Mac 上)
- javascript - Accordion 上的最大高度切换动画
- git - 当我进行未跟踪的更改时,如何将项目目录重新连接到 github?