From fe004bd1c1fd1db28a5e3c1db41ab091e700a004 Mon Sep 17 00:00:00 2001 From: Kevin Campbell Date: Fri, 29 Sep 2017 11:29:16 -0700 Subject: [PATCH 1/2] Added new 'stripKeyPrefix' option to the S3 TransferManager's downloadDirectory method. --- .../services/s3/transfer/TransferManager.java | 27 ++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/aws-java-sdk-s3/src/main/java/com/amazonaws/services/s3/transfer/TransferManager.java b/aws-java-sdk-s3/src/main/java/com/amazonaws/services/s3/transfer/TransferManager.java index 499d7a1887be..bf39b5d8b30b 100644 --- a/aws-java-sdk-s3/src/main/java/com/amazonaws/services/s3/transfer/TransferManager.java +++ b/aws-java-sdk-s3/src/main/java/com/amazonaws/services/s3/transfer/TransferManager.java @@ -1149,12 +1149,26 @@ public MultipleFileDownload downloadDirectory(String bucketName, String keyPrefi } public MultipleFileDownload downloadDirectory(String bucketName, String keyPrefix, File destinationDirectory, KeyFilter filter) { - return downloadDirectory(bucketName, keyPrefix, destinationDirectory, false, filter); + return downloadDirectory(bucketName, keyPrefix, destinationDirectory, false, filter, false); } public MultipleFileDownload downloadDirectory(String bucketName, String keyPrefix, File destinationDirectory, boolean resumeOnRetry) { - return downloadDirectory(bucketName, keyPrefix, destinationDirectory, resumeOnRetry, null); + return downloadDirectory(bucketName, keyPrefix, destinationDirectory, resumeOnRetry, null, false); + } + + public MultipleFileDownload downloadDirectory(String bucketName, String keyPrefix, File destinationDirectory, KeyFilter filter, boolean stripKeyPrefix) { + return downloadDirectory(bucketName, keyPrefix, destinationDirectory, false, filter, stripKeyPrefix); + } + + public MultipleFileDownload downloadDirectory(String bucketName, String keyPrefix, File destinationDirectory, + boolean resumeOnRetry, boolean stripKeyPrefix) { + return downloadDirectory(bucketName, keyPrefix, destinationDirectory, resumeOnRetry, null, stripKeyPrefix); + } + + public MultipleFileDownload downloadDirectory(String bucketName, String keyPrefix, File destinationDirectory, + boolean resumeOnRetry, KeyFilter filter) { + return downloadDirectory(bucketName, keyPrefix, destinationDirectory, resumeOnRetry, filter, false); } /** @@ -1178,7 +1192,9 @@ public MultipleFileDownload downloadDirectory(String bucketName, String keyPrefi * recursively. * @param destinationDirectory * The directory to place downloaded files. Subdirectories will - * be created as necessary. + * be created as necessary. The created directory structure + * will match that of the entire keys. See {@code stripKeyPrefix} + * to change this behavior. * @param resumeOnRetry * If set to true, upon an immediate retry of a failed object * download, the TransferManager will resume the @@ -1186,9 +1202,12 @@ public MultipleFileDownload downloadDirectory(String bucketName, String keyPrefi * @param filter * If set, applies the filter to determine which keys to include * in the download request. (default is include all). + * @param stripKeyPrefix + * If set, strips the {@code keyPrefix} from the directory structure + * of the downloaded files. */ public MultipleFileDownload downloadDirectory(String bucketName, String keyPrefix, File destinationDirectory, - boolean resumeOnRetry, KeyFilter filter) { + boolean resumeOnRetry, KeyFilter filter, boolean stripKeyPrefix) { if ( keyPrefix == null ) keyPrefix = ""; if ( filter == null ) { From a95db26df07b0b8ec3893a60bf5a61fb300883c1 Mon Sep 17 00:00:00 2001 From: Kevin Campbell Date: Fri, 29 Sep 2017 12:08:11 -0700 Subject: [PATCH 2/2] Added in the actual stripping of the key prefix --- .../com/amazonaws/services/s3/transfer/TransferManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-java-sdk-s3/src/main/java/com/amazonaws/services/s3/transfer/TransferManager.java b/aws-java-sdk-s3/src/main/java/com/amazonaws/services/s3/transfer/TransferManager.java index bf39b5d8b30b..5fd3dc014d09 100644 --- a/aws-java-sdk-s3/src/main/java/com/amazonaws/services/s3/transfer/TransferManager.java +++ b/aws-java-sdk-s3/src/main/java/com/amazonaws/services/s3/transfer/TransferManager.java @@ -1287,7 +1287,7 @@ public MultipleFileDownload downloadDirectory(String bucketName, String keyPrefi for ( S3ObjectSummary summary : objectSummaries ) { // TODO: non-standard delimiters - File f = new File(destinationDirectory, summary.getKey()); + File f = new File(destinationDirectory, stripKeyPrefix ? summary.getKey().substring(keyPrefix.length()) : summary.getKey()); File parentFile = f.getParentFile(); if ( !parentFile.exists() && !parentFile.mkdirs() ) {