Amazon S3 - 复制粘贴文件路径问题

时间:2017-01-18 14:48:56

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

我正在尝试将所有文​​件路径放入存储桶中。使用listobjects函数我能够实现它。但是存在文件路径问题。

考虑这是文件夹结构

SampleBucket - > A(根文件夹) - > B(子文件夹) - > c(B中的子文件夹)

我需要的是

http://SampleBucket.s3.amazonaws.com/A/

http://SampleBucket.s3.amazonaws.com/A/B/

http://SampleBucket.s3.amazonaws.com/A/B/C

我得到的是

http://SampleBucket.s3.amazonaws.com/A/

http://SampleBucket.s3.amazonaws.com/A/B/C

当我创建" A"文件夹&复制粘贴" B"从我的本地驱动器到云浆果的文件夹

这是我获取所有文件夹的代码。存储桶中的文件..

public List<S3ObjectSummary> getObjectslistFromFolder(String bucketName, String folderKey) {    
AWSCredentials awsCreds = new BasicAWSCredentials(accessKey, secretKey);
AmazonS3 s3client = new AmazonS3Client(awsCreds); 
ObjectListing current = s3client.listObjects(bucketName,folderKey);
List<S3ObjectSummary> keyList = current.getObjectSummaries();
current = s3client.listNextBatchOfObjects(current);
while (current.isTruncated()){
    keyList.addAll(current.getObjectSummaries());
    current = s3client.listNextBatchOfObjects(current);
}
keyList.addAll(current.getObjectSummaries());   
return keyList;

}

2 个答案:

答案 0 :(得分:1)

S3没有文件夹。它基本上有key =&gt;对象映射+匹配键前缀的能力。

当您正在寻找A /您正在查看所有具有以A /

开头的前缀的键

文件夹的错觉通常由您正在使用的软件(cloudberry)在客户端构建,或者如果您的应用程序逻辑依赖于此,您还可以解析回来“重新创建”本地文件夹的密钥。

同样,S3只知道密钥,并且可以在密钥上进行前缀匹配。

答案 1 :(得分:0)

似乎云莓果创造了两个对象。 a /和a / b / c /。我可以用这些cli命令重现它:

$ aws s3api put-object --bucket testBucket --key "a/" 
$ aws s3api put-object --bucket testBucket --key "a/b/c/" 
$ aws s3api list-objects --bucket testBucket --prefix a --output json | jq -r .Contents[].Key
a/
a/b/c/

在AWS S3控制台中,它们看起来像普通子文件夹a,b和c。你应该知道S3并没有真正的子文件夹,/只是键的一部分。