#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-core.version>1.1.0</aws-lambda-java-core.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> | ||||
|         <mockito-core.version>2.8.9</mockito-core.version> | ||||
|         <assertj-core.version>3.8.0</assertj-core.version> | ||||
|  | ||||
							
								
								
									
										56
									
								
								aws/src/main/java/com/baeldung/s3/MultipartUpload.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								aws/src/main/java/com/baeldung/s3/MultipartUpload.java
									
									
									
									
									
										Normal file
									
								
							| @ -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(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										61
									
								
								aws/src/test/java/com/baeldung/s3/MultipartUploadTest.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								aws/src/test/java/com/baeldung/s3/MultipartUploadTest.java
									
									
									
									
									
										Normal file
									
								
							| @ -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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user