Java 从AWS下载特定文件夹的内容

Java 从AWS下载特定文件夹的内容,java,amazon-web-services,amazon-s3,Java,Amazon Web Services,Amazon S3,我是AWS新手,从AWS中的特定文件夹下载文件时遇到困难。我知道AWS中没有文件夹概念 我可以通过以下代码下载bucket根文件夹中的文件,但不能下载任何特定文件夹中的文件: String fileName = "savings.pdf"; private static String bucketName = "XXXXXX.statement"; S3Object fetchFile = s3.getObject(new GetObjectRequest(bucketName.concat("

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

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

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();
但无法下载bucket中文件夹的所有内容。请建议一个合适的方法

我试图回答,但在bucketName中添加任何内容都不起作用:

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


无法工作。

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


您可能需要查看类中的接口。

请不要在末尾使用斜杠,如果键存在,它将起作用。默认情况下,S3服务附加斜杠

根据@Michael comment编辑解决方案。在文件名中使用前缀是正确的解决方案。不在bucket名称中

S3Object fetchFile = s3.getObject(new GetObjectRequest(bucketName, "APL420/" + fileName));
从S3RequestEndpointResolver添加代码段:

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

怎么样
s3objectfetchfile=s3.getObject(新的GetObjectRequest(bucketName,“/APL420/”+fileName))?我得到的
指定的密钥不存在
谢谢abhilekh!我的印象是,在阅读了另一个答案后,我需要在“APL420”的末尾加上“/”。这样愚蠢的错误。谢谢你救了我一天如果这行得通的话,它本质上是图书馆里的一个bug。不要将密钥前缀(“路径”)附加到bucket名称,而是将其添加到文件名之前
Key=“APL420/”+Filename
是正确的解决方案,是的,它需要一个尾随斜杠。另一个问题的答案在某些情况下可能有效,但出于同样的原因,原则上也是错误的。任何关于如何使用MultipleFileDownload从特定文件夹下载多个文件的代码,只要能让我开始就可以了
private String getPathStyleResourcePath() {
  return bucketName + "/" + (key != null ? key : "");
}