JavaScript aws-sdk S3 deleteObject(s) 成功但实际上并没有删除任何东西

标签 javascript express amazon-s3 aws-sdk

在我正在构建的 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 上。

我做错了什么吗?我以为我完全按照文档进行了操作。

此外,无论是否在存储桶上启用版本控制,都会出现问题。启用版本控制后,我的回复是:

{ Deleted: 
[ { Key: 'file name',
   DeleteMarker: true,
   DeleteMarkerVersionId: 'long id' } ],
Errors: [] }

最佳答案

试试这个。您需要使用 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) {}

关于JavaScript aws-sdk S3 deleteObject(s) 成功但实际上并没有删除任何东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35048604/

相关文章:

javascript - 如何在不重新加载页面的情况下使用ajax发送数据? ( Node )

javascript - Mongoose:异步验证

javascript - 如何知道查询中缺少哪些参数?

ruby-on-rails - Heroku:在没有本地文件系统的情况下为大型动态生成的 Assets 提供服务

ruby-on-rails - 由于跨域请求,带有 Jquery 文件上传的 Carrierwave_Direct 不会重定向

javascript - 如何让我的div默认折叠?

javascript - jquery-1.9.1.js :4421 Uncaught Error: Syntax error, 无法识别的表达式:/item/category/category_details/7

javascript - Jquery UI CheckBox Button - 按钮和点击兼容性问题 - ie8

mysql - 在 sequelize 中将关联的表属性作为主表属性传递

python-3.x - boto3 发出的原始请求