【发布时间】:2020-10-27 08:42:20
【问题描述】:
在我正在构建的 MEAN.js 应用程序中,我将图像上传到 AWS S3。我正在尝试使用 AWS 开发工具包从站点中删除不需要的图像,但在成功调用 ajax 后,该文件仍保留在 S3 上。
我需要这样的 AWS 开发工具包,它可以在有和没有配置变量的情况下工作(应该如此):
var aws = require('aws-sdk');
aws.config.update({accessKeyId: process.env.AWS_ACCESS_KEY_ID, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY});
对于我的路线,我有以下代码:
router.post('/delete', auth, function(req,res, next){
if(req.body.key) {
var s3 = new aws.S3();
var params = {
Bucket: 'bucket name',
Key: req.body.key
};
s3.deleteObject(params, function (err, data) {
if (err) {
console.log(err, err.stack);
return next(err);
}
console.log(data);
res.end('done');
我收到 200 响应,{} 已记录到控制台,但文件并未从存储中删除。我也试过像这样使用deleteObjects 方法:
var params = {
Bucket: 'bucket name',
Delete: {
Objects: [
{
Key: req.body.key
}
]
}
};
s3.deleteObjects(params, function (err, data) {
if (err) {
console.log(err, err.stack);
return next(err);
}
console.log(data);
res.end('done');
当我使用 deleteObjects 时,我得到 { Deleted: [ { Key: 'file name' } ], Errors: [] } 作为响应,但文件仍在 S3 上。
我做错了吗?我以为我按照文档去了一个 T。
此外,无论是否在存储桶上启用版本控制,都会出现问题。启用版本控制后,我的回答是:
{ Deleted:
[ { Key: 'file name',
DeleteMarker: true,
DeleteMarkerVersionId: 'long id' } ],
Errors: [] }
【问题讨论】:
-
在检查文件是否仍然存在之前,您要等待多长时间? S3 最终是一致的,因此它可能会在一段时间内保持可用(不确定多长时间)。
-
我已发送多次删除请求的图像已持续至少 30 分钟。我尝试发送一个删除电话,但它也从未被删除。但这绝对是未来要记住的事情。谢谢克里斯。
-
这仅在我使用 then/catch 语法时才对我有效。使用 async/await 我得到与 OP 相同的结果。
标签: javascript express amazon-s3 aws-sdk