Skip to content

Commit a526bed

Browse files
harshilsharma63pivovarit
authored andcommitted
#BAEL-1549 Completed implementation of multipart upload (eugenp#3816)
1 parent 4d08915 commit a526bed

3 files changed

Lines changed: 118 additions & 1 deletion

File tree

aws/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
<aws-lambda-java-events.version>1.3.0</aws-lambda-java-events.version>
1919
<aws-lambda-java-core.version>1.1.0</aws-lambda-java-core.version>
2020
<gson.version>2.8.0</gson.version>
21-
<aws-java-sdk.version>1.11.154</aws-java-sdk.version>
21+
<aws-java-sdk.version>1.11.290</aws-java-sdk.version>
2222
<junit.version>4.12</junit.version>
2323
<mockito-core.version>2.8.9</mockito-core.version>
2424
<assertj-core.version>3.8.0</assertj-core.version>
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.baeldung.s3;
2+
3+
import com.amazonaws.AmazonClientException;
4+
import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
5+
import com.amazonaws.event.ProgressListener;
6+
import com.amazonaws.regions.Regions;
7+
import com.amazonaws.services.s3.AmazonS3;
8+
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
9+
import com.amazonaws.services.s3.model.PutObjectRequest;
10+
import com.amazonaws.services.s3.transfer.TransferManager;
11+
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;
12+
import com.amazonaws.services.s3.transfer.Upload;
13+
14+
import java.io.File;
15+
import java.util.concurrent.Executors;
16+
17+
public class MultipartUpload {
18+
19+
public static void main(String[] args) throws Exception {
20+
String existingBucketName = "baeldung-bucket";
21+
String keyName = "my-picture.jpg";
22+
String filePath = "documents/my-picture.jpg";
23+
24+
AmazonS3 amazonS3 = AmazonS3ClientBuilder
25+
.standard()
26+
.withCredentials(new DefaultAWSCredentialsProviderChain())
27+
.withRegion(Regions.DEFAULT_REGION)
28+
.build();
29+
30+
int maxUploadThreads = 5;
31+
32+
TransferManager tm = TransferManagerBuilder
33+
.standard()
34+
.withS3Client(amazonS3)
35+
.withMultipartUploadThreshold((long) (5 * 1024 * 1024))
36+
.withExecutorFactory(() -> Executors.newFixedThreadPool(maxUploadThreads))
37+
.build();
38+
39+
ProgressListener progressListener =
40+
progressEvent -> System.out.println("Transferred bytes: " + progressEvent.getBytesTransferred());
41+
42+
PutObjectRequest request = new PutObjectRequest(existingBucketName, keyName, new File(filePath));
43+
44+
request.setGeneralProgressListener(progressListener);
45+
46+
Upload upload = tm.upload(request);
47+
48+
try {
49+
upload.waitForCompletion();
50+
System.out.println("Upload complete.");
51+
} catch (AmazonClientException e) {
52+
System.out.println("Error occurred while uploading file");
53+
e.printStackTrace();
54+
}
55+
}
56+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package com.baeldung.s3;
2+
3+
import com.amazonaws.event.ProgressListener;
4+
import com.amazonaws.services.s3.AmazonS3;
5+
import com.amazonaws.services.s3.model.PutObjectRequest;
6+
import com.amazonaws.services.s3.model.PutObjectResult;
7+
import com.amazonaws.services.s3.transfer.TransferManager;
8+
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;
9+
import com.amazonaws.services.s3.transfer.Upload;
10+
import org.junit.Before;
11+
import org.junit.Test;
12+
13+
import java.io.File;
14+
import java.util.concurrent.Executors;
15+
16+
import static org.assertj.core.api.Assertions.assertThat;
17+
import static org.mockito.ArgumentMatchers.any;
18+
import static org.mockito.ArgumentMatchers.anyString;
19+
import static org.mockito.Mockito.mock;
20+
import static org.mockito.Mockito.verify;
21+
import static org.mockito.Mockito.when;
22+
23+
public class MultipartUploadTest {
24+
25+
private static final String BUCKET_NAME = "bucket_name";
26+
private static final String KEY_NAME = "picture.jpg";
27+
28+
private AmazonS3 amazonS3;
29+
private TransferManager tm;
30+
private ProgressListener progressListener;
31+
32+
@Before
33+
public void setup() {
34+
amazonS3 = mock(AmazonS3.class);
35+
tm = TransferManagerBuilder
36+
.standard()
37+
.withS3Client(amazonS3)
38+
.withMultipartUploadThreshold((long) (5 * 1024 * 1025))
39+
.withExecutorFactory(() -> Executors.newFixedThreadPool(5))
40+
.build();
41+
progressListener =
42+
progressEvent -> System.out.println("Transferred bytes: " + progressEvent.getBytesTransferred());
43+
}
44+
45+
@Test
46+
public void whenUploadingFileWithTransferManager_thenVerifyUploadRequested() {
47+
File file = mock(File.class);
48+
PutObjectResult s3Result = mock(PutObjectResult.class);
49+
50+
when(amazonS3.putObject(anyString(), anyString(), (File) any())).thenReturn(s3Result);
51+
when(file.getName()).thenReturn(KEY_NAME);
52+
53+
PutObjectRequest request = new PutObjectRequest(BUCKET_NAME, KEY_NAME, file);
54+
request.setGeneralProgressListener(progressListener);
55+
56+
Upload upload = tm.upload(request);
57+
58+
assertThat(upload).isNotNull();
59+
verify(amazonS3).putObject(request);
60+
}
61+
}

0 commit comments

Comments
 (0)