可以肯定地检查S3存储桶的存在,但无法列出其对象

时间:2019-02-06 15:54:06

标签: scala amazon-web-services amazon-s3

我正在像嵌套目录一样构建S3存储桶,以便按照某些条件存储文件,例如,我注意到的第一件事是考虑到 sample 仅存储那些 test = xxx 键,它们是最终实例中存储文件的键。

s3Client.doesBucketExistV2("one/two/sample") // true
s3Client.doesBucketExistV2("one/two/sample/test=123") // false

两者都存在并且 test = xxx 包含文件,但是它们不是由我在AWS中手动创建的,而是由程序手动创建的。

Why test=xxx doesn't returninstead of是假?

我的第二个疑问是当尝试列出给定存储桶的对象时...

s3Client.listObjects(new ListObjectsRequest()
   .withBucketName("one/")
   .withPrefix("two/")
   .withPrefix("sample/")) // The specified key does not exist. [404]

Why can't I list the objects of a given bucket that exists?

2 个答案:

答案 0 :(得分:1)

第二个.withPrefix(“ sample /”)覆盖.withPrefix(“ two /”)。它不连接字符串。

存储桶名称,前缀和键是分开的。在最后一种情况下,BucketExistV2()也会证明密钥。

Your bucketname is: one
Your prefix is: /two/
or Another prefix is: /two/sample/
with the key: "test=xxx"


s3Client.listObjects(new ListObjectsRequest()
   .withBucketName("one")
   .withPrefix("/two/sample/");

答案 1 :(得分:0)

也许试试看:

s3 = boto3.client("s3")
list_of_files = s3.list_objects_v2(Bucket=your-bucket)['Contents']