Java 如何下载S3 Bucket上的整个文件夹?

Java 如何下载S3 Bucket上的整个文件夹?,java,amazon-web-services,amazon-s3,Java,Amazon Web Services,Amazon S3,我使用Java SDK并尝试使用GetObjectRequest类下载文件夹,但是可以下载我的文件夹,包括其子文件夹和所有要下载的文件?您必须调用ListBucket API来获取文件列表,然后使用GetObject单独下载每个文件是,使用TransferManager.downloadFolder:)您可以使用TransferManager类中的downloadDirectory方法: TransferManager transferManager = new TransferManager(

我使用Java SDK并尝试使用GetObjectRequest类下载文件夹,但是可以下载我的文件夹,包括其子文件夹和所有要下载的文件?

您必须调用ListBucket API来获取文件列表,然后使用GetObject单独下载每个文件

是,使用TransferManager.downloadFolder:)

您可以使用
TransferManager
类中的
downloadDirectory
方法:

TransferManager transferManager = new TransferManager(new DefaultAWSCredentialsProviderChain());
File dir = new File("destDir");

MultipleFileDownload download =  transferManager.downloadDirectory("myBucket", "myKey", dir);
download.waitForCompletion();
如中所述,此方法:

下载虚拟目录中由给定目标目录的键前缀指定的所有对象。所有虚拟子目录都将递归下载


下面是下载整个bucket(经过测试)的代码:


分享你的研究成果对每个人都有帮助。告诉我们您尝试了什么,以及为什么它不能满足您的需求。这表明你花了时间来帮助自己,它使我们避免重复显而易见的答案,最重要的是,它帮助你得到一个更具体和相关的答案!另请参见如何下载特定的
子文件夹
Ex。如果我将前缀指定为
测试/同步
,它将下载
同步
的所有内容,但它也会在目标位置创建一个
测试
文件夹
import com.amazonaws.AmazonServiceException;
import aws.example.s3.XferMgrProgress;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;
import com.amazonaws.services.s3.transfer.MultipleFileDownload;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import java.io.*;
import com.amazonaws.auth.PropertiesFileCredentialsProvider;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.AmazonClientException;
public class S3DownloadApp {

    public static void main(String [] args){
        AWSCredentials credentials = null;
        try {
            credentials = new PropertiesFileCredentialsProvider("keys.props").getCredentials();
        } catch (Exception e) {
            throw new AmazonClientException(
                    "Cannot load the credentials from the credential profiles file. " , e);
        }

        TransferManager xfer_mgr = TransferManagerBuilder.standard().withS3Client(AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(credentials)).withRegion("us-west-2").build()).build();//TransferManagerBuilder.standard().build();

        try {
            MultipleFileDownload xfer = xfer_mgr.downloadDirectory(
                    "bucketName", null, new File("/Users/admin/Desktop/downloadFolder"));
            XferMgrProgress.showTransferProgress(xfer);
            XferMgrProgress.waitForCompletion(xfer);
        } catch (AmazonServiceException e) {
            System.err.println(e.getErrorMessage());
            System.exit(1);
        }
    }
}