首页 > 解决方案 > 使用节点 js aws-sdk 检查 S3 上是否存在文件夹

问题描述

首先,我知道没有文件夹之类的东西,但是,我使用该术语只是为了简单起见。现在我的桶里有很多东西。对于某些文件夹,我可以使用 getObject 来查找它们是否存在,但对于大多数文件夹,当我清楚地看到它们存在时,我会收到错误 No such key。我还想说我已经尝试过 headObject、listObjectV2,但没有运气。

this is my params object
{
     Bucket: bucket //bucket is defined in the program
     Key: folder // defined in the program above
                 //example key - abc-1-1/00000N/30/2018.10.7.8/
                 //inside this folder are multiple files 
}

目标是查找文件夹是否存在,并在此基础上进行一些处理。我看到了很多关于这个问题的答案,建议使用 headObject、getObjects 等,但它们似乎都不起作用

这是我的 getObjects 代码片段

params = {
            Bucket: bucket,
            Key: folder
        }
        s3.getObject(params, function (err, found) {

            if (err){ 
                console.log('bucket is'+bucket);
                ..........
                .....
            }
            else{
                ....
            }
            ..
            });

标签: node.jsamazon-web-servicesamazon-s3aws-sdk

解决方案


我终于找到了解决这种情况的方法。如果您的应用程序要求您检查特定对象(“文件夹”)是否存在,并在该对象(“文件夹”)实际存在时继续进行,您可以使用此解决方案。我相信 s3.getObject 或 s3.headObject 的工作方式存在问题,无论如何这里是解决方案。

1)使用 s3.listObjectsV2 方法。

2) 检查响应的内容字段。如果它为空,则您提供的前缀不存在。这是代码片段

s3.listObjectsV2(params, function (err, found) {

                if (err){ 
                    console.log(err);
                    errJson = {
                        'status': -1,
                        'message': 'Error while trying to list files'
                    };
                    callback(errJson);

                } 
                else {  

                    if (found.Contents.length === 0) {

                        errJson = {
                            'status': 0,
                            'message': 'Either the files are not present at s3 or the folder is incorrect '
                        }
                        callback(errJson);
                    }
                    else{
                               .....
                    }
....
});

推荐阅读