从AWS

时间:2016-12-18 08:14:12

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

我是AWS新手,在AWS中从特定文件夹下载文件时遇到困难。我知道AWS中没有文件夹概念。

我可以通过以下代码下载存储桶根文件夹中的文件,但不能在任何特定文件夹中下载:

String fileName = "savings.pdf";
private static String bucketName = "XXXXXX.statement";
S3Object fetchFile = s3.getObject(new GetObjectRequest(bucketName.concat("APL420/"), fileName));
final BufferedInputStream i = new BufferedInputStream(fetchFile.getObjectContent());
InputStream objectData = fetchFile.getObjectContent();
Files.copy(objectData, new File(fileName).toPath()); 
objectData.close();

但无法下载存储桶中文件夹的所有内容。请建议一个正确的方法。

我尝试了this回答,但是将任何内容附加到bucketName并不是在工作:

S3Object fetchFile = s3.getObject(new GetObjectRequest(bucketName + "APL420/", fileName));

OR

S3Object fetchFile = s3.getObject(new GetObjectRequest(bucketName + "/APL420/", fileName));

无效。

2 个答案:

答案 0 :(得分:1)

请不要在最后使用斜杠,否则如果密钥存在则它将起作用。 S3服务默认添加斜杠。

根据@Michael评论编辑解决方案。在文件名中使用前缀是正确的解决方案。不在存储桶名称中。

S3Object fetchFile = s3.getObject(new GetObjectRequest(bucketName, "APL420/" + fileName));

从S3RequestEndpointResolver添加片段:

private String getPathStyleResourcePath() {
  return bucketName + "/" + (key != null ? key : "");
}

答案 1 :(得分:0)

getObject在指定的存储桶和密钥下获取存储在Amazon S3中的单个对象。如果未满足指定的约束,则返回null。

您可能需要查看MultipleFileDownload课程中的TransferManager界面。