java - Java:如何打印 s3 存储桶的内容
问题描述
我正在使用 jdk 11 和virtual-host-style-access(AWS SDK for Java 版本 2)在 AWS s3 存储桶中创建/访问以下对象:
https://docs.aws.amazon.com/sdk-for-java/v2/developer-guide/examples-s3-objects.html#list-object
虽然我能够在指定的存储桶中创建对象,但我无法打印存储桶中的内容/对象列表,尽管当我检查了权限时,每个人都可以查看存储桶中的对象。错误信息是:
software.amazon.awssdk.services.s3.model.NoSuchKeyException: The specified key does not exist. (Service: S3, Status Code: 404
这是创建 s3client 的方式:
adapterSmsS3Client = S3Client.builder()
.region(Region.US_WEST_2)
.credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create(ACCESS_KEY,SECRET_KEY)))
.endpointOverride(URI.create(BASE_URL))
.build();
这就是我尝试打印列表的方式:
public static void listBucketObjects( S3Client s3, String bucketName ) {
ListBucketsResponse res1 = s3.listBuckets();
ListObjectsRequest listObjects = ListObjectsRequest
.builder()
.bucket(BUCKET_NAME)
.build();
ListObjectsResponse res = s3.listObjects(listObjects);
List<S3Object> objects = res.contents();
for (ListIterator iterVals = objects.listIterator(); iterVals.hasNext(); ) {
S3Object myValue = (S3Object) iterVals.next();
System.out.print("\n The name of the key is " + myValue.key());
System.out.print("\n The object is " + calKb(myValue.size()) + " KBs");
System.out.print("\n The owner is " + myValue.owner());
}
}
BUCKET_NAME 是 s3 上存储桶的名称(不是任何 URL)
虽然,我想提一下,如果我使用 Path-style-request(AWS SDK for Java 版本 1),请执行以下操作:
https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/examples-s3-objects.html
我能够从同一个存储桶中打印内容。但是,我们不打算这样做。
关于我为什么会收到“密钥不存在”错误或潜在解决方案的任何见解?
解决方案
如果您对权限有任何问题,您将获得一个403 forbidden
; 不是一个404 NoSuchKey
。
您在存储桶中的对象的名称是什么?我的猜测是您有一些特殊字符或 url 编码的字符会导致问题。有关更多详细信息,请参阅https://aws.amazon.com/premiumsupport/knowledge-center/404-error-nosuchkey-s3/?nc1=h_ls。
我建议你用listObjectsV2
V1 代替。
推荐阅读
- node.js - Mongo-session.getDatabase 和 db 有什么区别
- flutter - Flutter 小部件测试失败
- automata - 怀疑 MT 和下推自动机
- ruby-on-rails - 如何将参数传递给邮件方法?导轨 6
- backend - 获取后端列表sitefinity中的ID选定项
- r - 删除重复行时如何在一列中保留一个或多个值?
- c# - 如果文本文件中的一行与我的组合框中的字符串匹配,如何删除或修改 C#
- c# - portal.azure 上的错误 413 - ASP.Net Core 2.1 Api
- java - Spring @Cacheable 不起作用 - 多线程
- python - 排除基于否定前项的单词变体