amazon-web-services - 从 s3 存储桶中获取具有相同前缀的多个对象
问题描述
我在 s3 存储桶中有多个文件夹,每个文件夹都包含一些.txt
文件。现在我想.txt
使用 javascript API 从给定文件夹中获取 10 个文件。例如:路径是这样的
s3bucket/folder1/folder2/folder3/id
现在文件夹id
是包含多个 .txt 文件的文件夹。id
folder3中有多个文件夹。我想传递并获得 10 个具有前缀的id
s3 对象。id
这可以使用 listObjectsV2 吗?如何将响应限制为仅 10 个对象。
____obj1.txt
______id1----|____obj2.txt
| _____obj3.txt
|_____ id2---|____obj4.txt
s3bucket/folder1/folder2/folder3-| ____obj5.txt
|_____ id3---|____obj6.txt
所以如果我通过
var params= {Bucket:"s3bucket",Key:"folder1/folder2/folder3/id1"}
我应该得到obj1.txt
并obj2.txt
回应。
解决方案
您使用的是哪种S3方法?我建议使用listObjectsV2
来实现你的目标。可能的调用可能如下所示
const s3 = new AWS.S3();
const { Contents } = await s3.listObjectsV2({
Bucket: 's3bucket',
Prefix: 'folder1/folder2/folder3/id1',
MaxKeys: 10
}).promise();
要获取对象值,您需要调用getObject
每个Key
.
const responses = await Promise.all((Contents || []).map(({ Key }) => (
s3.getObject({
Bucket: 's3bucket',
Key
}).promise()
)));
推荐阅读
- sql - 触发器一直无法编译。表存在时未找到索赔表
- perl - perl hash ref return: { 'a' =>1, % { sub() } }
- android - Android:找不到符号变量错误
- linux - 创建 ssh 用户,始终登录文件夹
- android - 无法使用 Firebase 云消息向 Android 设备发送推送通知
- typescript - 当 myRecord 已经输入为 Record 时如何使用 `keyof typeof myRecord`
- dynamics-crm - 个人或公司拥有的 Dynamics CRM 实体
- java - Angular:具有多个参数的 HTTP POST 不起作用
- amazon-web-services - 带有自定义授权方的内部服务器错误 AWS API Gateway
- python - 散点图线到乱序数据