node.js - 使用节点 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{
....
}
..
});
解决方案
我终于找到了解决这种情况的方法。如果您的应用程序要求您检查特定对象(“文件夹”)是否存在,并在该对象(“文件夹”)实际存在时继续进行,您可以使用此解决方案。我相信 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{
.....
}
....
});
推荐阅读
- laravel - 无法在 laravel 中使用 ajax 保存价值
- python - 如何在 Anaconda 环境中更改 Python 解释器路径?
- java - 有没有办法循环通过以编程方式添加的 SeekBars 数组
- bash - 如何使用 bash 查找出现在文件同一行的 2 个值?
- python - 'max_pooling2d_8/MaxPool' 从 1 中减去 3 导致的负维度大小
- java - 安装 AspectJ Eclipse
- go - 如何在struct中正确构造struct
- javascript - 内置函数中尾调用的优化
- sql - 以 DRY 方式将两个或多个列更新为相同的值 SQL
- c++ - 如何让 RecursiveASTVisitor 中止当前子树