java - 从 AWS 下载特​​定文件夹的内容

标签 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));

或者

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

不工作。

最佳答案

请不要在末尾使用斜杠,这样如果 key 存在,它就会起作用。 S3 服务默认附加斜杠。

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

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

从 S3RequestEndpointResolver 添加代码片段:

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

关于java - 从 AWS 下载特​​定文件夹的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41206578/

相关文章:

.net - 亚马逊 S3.net SDK

python - botocore.exceptions.ConnectTimeoutError : Connect timeout on endpoint URL

java - 部署时没有将库复制到 Tomcat 目录

java - 从地理坐标到地磁坐标的转换

python - 使用 SAM 通过自定义 python 函数构建 AWS Lambda 层

python - 用于从 s3 存储桶下载最新文件的 Boto 脚本

java - 使用Streams java从对象列表中获取成员列表

java - 删除从不同 jar 调用相同对象的重复代码

c# - 如何配置客户端? AWS Elasticsearch 请求 C#

amazon-web-services - AWS Cognito用户名/电子邮件登录区分大小写