JavaScript aws-sdk S3 deleteObject(s) 成功但实际上没有删除任何东西
JavaScript aws-sdk S3 deleteObject(s) succedes but doesn't actually delete anything
在我正在构建的 MEAN.js 应用程序中,我将图像上传到 AWS S3。我正在尝试使用 AWS SDK 从站点中删除不需要的图像,但在成功 ajax 调用后,文件仍保留在 S3 上。
我已经像这样需要 AWS SDK,它可以在有和没有配置变量的情况下工作(它应该如此):
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: [] }
看来第一条评论是对的,从 AWS S3 中删除文件需要一些时间。在这种情况下,它消失了一个多小时(可能是 6 个小时,我离开了很多)。
试试这个。您需要使用 promise() 来确保在结束执行之前删除对象。即使考虑到 S3 99.999999999% 的耐用性,仅仅为了一个简单的对象删除而等待 6 小时也是不正常的。
var params = {
Bucket : bucket,
Key : video
};
try {
await s3.deleteObject(params,function(err,data){
if (err) console.log(err,err.stack);
else console.log("Response:",data);
}).promise();
} catch (e) {}
我真的不认为 Aws 需要那么长时间才能删除。我遇到了同样的问题并通过更改文件名值解决了它,我最初使用 url 而不是使用我在上传图像时使用的文件名。
在我正在构建的 MEAN.js 应用程序中,我将图像上传到 AWS S3。我正在尝试使用 AWS SDK 从站点中删除不需要的图像,但在成功 ajax 调用后,文件仍保留在 S3 上。
我已经像这样需要 AWS SDK,它可以在有和没有配置变量的情况下工作(它应该如此):
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: [] }
看来第一条评论是对的,从 AWS S3 中删除文件需要一些时间。在这种情况下,它消失了一个多小时(可能是 6 个小时,我离开了很多)。
试试这个。您需要使用 promise() 来确保在结束执行之前删除对象。即使考虑到 S3 99.999999999% 的耐用性,仅仅为了一个简单的对象删除而等待 6 小时也是不正常的。
var params = {
Bucket : bucket,
Key : video
};
try {
await s3.deleteObject(params,function(err,data){
if (err) console.log(err,err.stack);
else console.log("Response:",data);
}).promise();
} catch (e) {}
我真的不认为 Aws 需要那么长时间才能删除。我遇到了同样的问题并通过更改文件名值解决了它,我最初使用 url 而不是使用我在上传图像时使用的文件名。