node.js - 如何使用 node.js 删除 s3 上的文件夹?

标签 node.js amazon-web-services amazon-s3

是的,我知道。 s3 存储上没有文件夹概念。但我真的很想用 node.js 从 s3 中删除一个特定的文件夹。我尝试了两种解决方案,但都没有奏效。 我的代码如下: 解决方案1: 直接删除文件夹。

var key='level/folder1/folder2/';
var strReturn;
        var params = {Bucket: MyBucket};
        var s3 = new AWS.S3(params);
        s3.client.listObjects({
            Bucket: MyBucket,
            Key: key
        }, function (err, data) {
            if(err){
                strReturn="{\"status\":\"1\"}";

            }else{
                strReturn=+"{\"status\":\"0\"}";
            }
            res.send(returnJson);
            console.log('error:'+err+' data:'+JSON.stringify(data));
        });

其实我在folder2下有很多文件。如果我定义这样的键,我可以从 folder2 中删除单个文件: var key='level/folder1/folder2/file1.txt',但是当我删除一个文件夹时它不起作用(key='level/folder1/folder2/')。 解决方案2: 当我将此文件或文件夹上传到 s3 时,我尝试将过期设置为对象。代码如下:

s3.client.putObject({
                Bucket: Camera_Bucket,
                Key: key,
                            ACL:'public-read', 
                Expires: 60 
            }

但它也没有。上传完成后,我检查了该文件的属性。它表明到期日期没有任何值(value):

Expiry Date:none
Expiration Rule:N/A

如何使用 node.js 删除 s3 上的文件夹?

最佳答案

这是 ES7 中的一个实现,带有 async 函数并使用 listObjectsV2(修改后的 List Objects API):

async function emptyS3Directory(bucket, dir) {
    const listParams = {
        Bucket: bucket,
        Prefix: dir
    };

    const listedObjects = await s3.listObjectsV2(listParams).promise();

    if (listedObjects.Contents.length === 0) return;

    const deleteParams = {
        Bucket: bucket,
        Delete: { Objects: [] }
    };

    listedObjects.Contents.forEach(({ Key }) => {
        deleteParams.Delete.Objects.push({ Key });
    });

    await s3.deleteObjects(deleteParams).promise();

    if (listedObjects.IsTruncated) await emptyS3Directory(bucket, dir);
}

调用它:

await emptyS3Directory(process.env.S3_BUCKET, 'images/')

关于node.js - 如何使用 node.js 删除 s3 上的文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20207063/

相关文章:

amazon-web-services - 有没有办法让多个 S3 存储桶触发 Lambda 函数?

python-3.x - 如何找出S3 Bucket上次访问的时间?

node.js - Unresolved 功能或方法要求

node.js - 类型错误 : Cannot read property of undefined in Node Express/POST

amazon-web-services - 通过API Gateway调用一个AWS Step函数并等待执行结果

linux - 使用 EC2 专用 AMI 的 Putty 出现 SSH 错误

amazon-web-services - 在 AWS 中使用 Packer 在 Windows 上运行 Ansible

ruby-on-rails - Carrierwave Direct gem 上传成功后没有重定向?

node.js - npm 命令不工作/响应

sql - 尝试使用 node-sqlanywhere 连接到远程 sql Anywhere 数据库时出现奇怪的错误