cap*_*der 5 amazon-s3 amazon-web-services node.js aws-sdk
首先,我知道没有文件夹这样的东西,但是,我使用这个术语只是为了简单起见。现在我的存储桶中有很多对象。对于某些文件夹,我可以使用 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
}
Run Code Online (Sandbox Code Playgroud)
目标是查找文件夹是否存在,并基于此进行一些处理。我看到这个问题的很多答案都暗示了 headObject、getObjects 等,但它们似乎都不起作用
这是我的 getObjects 代码片段
params = {
Bucket: bucket,
Key: folder
}
s3.getObject(params, function (err, found) {
if (err){
console.log('bucket is'+bucket);
..........
.....
}
else{
....
}
..
});
Run Code Online (Sandbox Code Playgroud)
为了检查“文件夹”是否存在,请检查存储桶中是否至少有一个对象的键以文件夹名称开头,加上尾部斜杠。
这可以使用listObjectV2来完成,如下所示:
const s3 = ... // S3 client
const Bucket = 'mybucket';
const Prefix = 'myfolder/mysubfolder/';
const MaxKeys = 1; // If a single object is found, the folder exists.
const params = {
Bucket,
Prefix,
MaxKeys
};
s3.listObjectsV2(params, (err, data) => {
const folderExists = data.Contents.length > 0;
// (folderExists == true) if the folder exists
});
Run Code Online (Sandbox Code Playgroud)
注意:上面使用文件夹的定义意味着至少有一个以文件夹为前缀的键。
要检测“空文件夹”,可以检查文件夹+_$folder$
后缀,如此处所述。
我终于找到了解决这种情况的方法。如果您的应用程序要求您检查特定对象(“文件夹”)是否存在,并在该对象(“文件夹”)实际存在时进一步处理,您可以使用此解决方案。我相信 s3.getObject 或 s3.headObject 的工作方式存在问题,无论如何这里是解决方案。
1) 使用 s3.listObjectsV2 方法。
2) 检查响应的 Contents 字段。如果它为空,则您提供的前缀不存在。这是代码片段
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{
.....
}
....
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6344 次 |
最近记录: |