#BAEL-1549 Completed implementation of multipart upload (#3816)
This commit is contained in:
parent
4d089155f1
commit
a526bed5c2
|
@ -18,7 +18,7 @@
|
||||||
<aws-lambda-java-events.version>1.3.0</aws-lambda-java-events.version>
|
<aws-lambda-java-events.version>1.3.0</aws-lambda-java-events.version>
|
||||||
<aws-lambda-java-core.version>1.1.0</aws-lambda-java-core.version>
|
<aws-lambda-java-core.version>1.1.0</aws-lambda-java-core.version>
|
||||||
<gson.version>2.8.0</gson.version>
|
<gson.version>2.8.0</gson.version>
|
||||||
<aws-java-sdk.version>1.11.154</aws-java-sdk.version>
|
<aws-java-sdk.version>1.11.290</aws-java-sdk.version>
|
||||||
<junit.version>4.12</junit.version>
|
<junit.version>4.12</junit.version>
|
||||||
<mockito-core.version>2.8.9</mockito-core.version>
|
<mockito-core.version>2.8.9</mockito-core.version>
|
||||||
<assertj-core.version>3.8.0</assertj-core.version>
|
<assertj-core.version>3.8.0</assertj-core.version>
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
package com.baeldung.s3;
|
||||||
|
|
||||||
|
import com.amazonaws.AmazonClientException;
|
||||||
|
import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
|
||||||
|
import com.amazonaws.event.ProgressListener;
|
||||||
|
import com.amazonaws.regions.Regions;
|
||||||
|
import com.amazonaws.services.s3.AmazonS3;
|
||||||
|
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
|
||||||
|
import com.amazonaws.services.s3.model.PutObjectRequest;
|
||||||
|
import com.amazonaws.services.s3.transfer.TransferManager;
|
||||||
|
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;
|
||||||
|
import com.amazonaws.services.s3.transfer.Upload;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.concurrent.Executors;
|
||||||
|
|
||||||
|
public class MultipartUpload {
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
String existingBucketName = "baeldung-bucket";
|
||||||
|
String keyName = "my-picture.jpg";
|
||||||
|
String filePath = "documents/my-picture.jpg";
|
||||||
|
|
||||||
|
AmazonS3 amazonS3 = AmazonS3ClientBuilder
|
||||||
|
.standard()
|
||||||
|
.withCredentials(new DefaultAWSCredentialsProviderChain())
|
||||||
|
.withRegion(Regions.DEFAULT_REGION)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
int maxUploadThreads = 5;
|
||||||
|
|
||||||
|
TransferManager tm = TransferManagerBuilder
|
||||||
|
.standard()
|
||||||
|
.withS3Client(amazonS3)
|
||||||
|
.withMultipartUploadThreshold((long) (5 * 1024 * 1024))
|
||||||
|
.withExecutorFactory(() -> Executors.newFixedThreadPool(maxUploadThreads))
|
||||||
|
.build();
|
||||||
|
|
||||||
|
ProgressListener progressListener =
|
||||||
|
progressEvent -> System.out.println("Transferred bytes: " + progressEvent.getBytesTransferred());
|
||||||
|
|
||||||
|
PutObjectRequest request = new PutObjectRequest(existingBucketName, keyName, new File(filePath));
|
||||||
|
|
||||||
|
request.setGeneralProgressListener(progressListener);
|
||||||
|
|
||||||
|
Upload upload = tm.upload(request);
|
||||||
|
|
||||||
|
try {
|
||||||
|
upload.waitForCompletion();
|
||||||
|
System.out.println("Upload complete.");
|
||||||
|
} catch (AmazonClientException e) {
|
||||||
|
System.out.println("Error occurred while uploading file");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,61 @@
|
||||||
|
package com.baeldung.s3;
|
||||||
|
|
||||||
|
import com.amazonaws.event.ProgressListener;
|
||||||
|
import com.amazonaws.services.s3.AmazonS3;
|
||||||
|
import com.amazonaws.services.s3.model.PutObjectRequest;
|
||||||
|
import com.amazonaws.services.s3.model.PutObjectResult;
|
||||||
|
import com.amazonaws.services.s3.transfer.TransferManager;
|
||||||
|
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;
|
||||||
|
import com.amazonaws.services.s3.transfer.Upload;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.concurrent.Executors;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
|
import static org.mockito.ArgumentMatchers.anyString;
|
||||||
|
import static org.mockito.Mockito.mock;
|
||||||
|
import static org.mockito.Mockito.verify;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
public class MultipartUploadTest {
|
||||||
|
|
||||||
|
private static final String BUCKET_NAME = "bucket_name";
|
||||||
|
private static final String KEY_NAME = "picture.jpg";
|
||||||
|
|
||||||
|
private AmazonS3 amazonS3;
|
||||||
|
private TransferManager tm;
|
||||||
|
private ProgressListener progressListener;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setup() {
|
||||||
|
amazonS3 = mock(AmazonS3.class);
|
||||||
|
tm = TransferManagerBuilder
|
||||||
|
.standard()
|
||||||
|
.withS3Client(amazonS3)
|
||||||
|
.withMultipartUploadThreshold((long) (5 * 1024 * 1025))
|
||||||
|
.withExecutorFactory(() -> Executors.newFixedThreadPool(5))
|
||||||
|
.build();
|
||||||
|
progressListener =
|
||||||
|
progressEvent -> System.out.println("Transferred bytes: " + progressEvent.getBytesTransferred());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenUploadingFileWithTransferManager_thenVerifyUploadRequested() {
|
||||||
|
File file = mock(File.class);
|
||||||
|
PutObjectResult s3Result = mock(PutObjectResult.class);
|
||||||
|
|
||||||
|
when(amazonS3.putObject(anyString(), anyString(), (File) any())).thenReturn(s3Result);
|
||||||
|
when(file.getName()).thenReturn(KEY_NAME);
|
||||||
|
|
||||||
|
PutObjectRequest request = new PutObjectRequest(BUCKET_NAME, KEY_NAME, file);
|
||||||
|
request.setGeneralProgressListener(progressListener);
|
||||||
|
|
||||||
|
Upload upload = tm.upload(request);
|
||||||
|
|
||||||
|
assertThat(upload).isNotNull();
|
||||||
|
verify(amazonS3).putObject(request);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue