#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> | ||||||
|  | |||||||
							
								
								
									
										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