ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Aws SDK] CreateMultipartUploadRequest
    java 2021. 4. 13. 23:43

    AWS SDK for Java - 2.xx 사용한 방법입니다.

     

    • 분할 업로드 방식
      • S3는 단일 개체에 대해 최대 5GB 까지만 업로드가 가능합니다.
      • MultipartUpload를 통해 하나의 파일을 여러 조각으로 나누어 전송이 가능합니다.
      • 100MB 이상의 파일부터 권장합니다.
      • ComplatedPart를 Collection으로 관리하여 5TB까지 part를 저장하여 전송할 수 있도록 합니다.

     

    import software.amazon.awssdk.services.s3.S3Client;
    import software.amazon.awssdk.services.s3.model.CompleteMultipartUploadRequest;
    import software.amazon.awssdk.services.s3.model.CompletedMultipartUpload;
    import software.amazon.awssdk.services.s3.model.CompletedPart;
    import software.amazon.awssdk.services.s3.model.CopyObjectRequest;
    import software.amazon.awssdk.services.s3.model.CopyObjectResponse;
    import software.amazon.awssdk.services.s3.model.CreateMultipartUploadRequest;
    import software.amazon.awssdk.services.s3.model.CreateMultipartUploadResponse;
    import software.amazon.awssdk.services.s3.model.UploadPartRequest;

     

    private void multipartS3Upload(File file, String key) {
    	//대용량 파일 업로드
    	try {
    		CreateMultipartUploadRequest createMultipartUploadRequest = CreateMultipartUploadRequest.builder()
    				.bucket(bucket).key(key).build();
    		
    		CreateMultipartUploadResponse response = amazonS3
    				.createMultipartUpload(createMultipartUploadRequest);						
    		
    		String uploadId = response.uploadId();
    		
    		int mB = 1024 * 1024 * 100; 
    		long parts = (file.length() / (long)mB)+1;
    		List<CompletedPart> completedParts = new ArrayList<CompletedPart>();
    		for(Integer i=1; i<parts+1; i++) { // Part number must be an integer between 1 and 10000
    			UploadPartRequest uploadPartRequest = UploadPartRequest.builder().bucket(bucket).key(key)
    					.uploadId(uploadId).partNumber(i).build();
    			String etag = amazonS3
    					.uploadPart(uploadPartRequest, RequestBody.fromBytes(readAccessFileOffset(file, (long)(i-1)*mB, (long)mB)))
    					.eTag();
    			completedParts.add(CompletedPart.builder().partNumber(i).eTag(etag).build());
    			log.info("[S3Client] Completed Upload File, "+key+" # Part Number : "+i);
    		}
    		
    		// Finally call completeMultipartUpload operation to tell S3 to merge all uploaded
    		// parts and finish the multipart operation.
    		CompletedMultipartUpload completedMultipartUpload = CompletedMultipartUpload.builder()
    				.parts(completedParts).build();
    		
    		CompleteMultipartUploadRequest completeMultipartUploadRequest = CompleteMultipartUploadRequest
    				.builder().bucket(bucket).key(key).uploadId(uploadId)
    				.multipartUpload(completedMultipartUpload).build();
    		
    		amazonS3.completeMultipartUpload(completeMultipartUploadRequest);
    		log.info("[S3Client] Completed Upload File " + key);
    	}catch(Exception e) {
    		log.error(e.getMessage());
    	}
    }

     

     


     

    참고

     

    docs.aws.amazon.com/ko_kr/sdk-for-java/latest/developer-guide/examples-s3-objects.html

     

    Work with Amazon S3 objects - AWS SDK for Java

    These code snippets assume that you understand the material in basics, and have configured default AWS credentials using the information in setup-credentials.

    docs.aws.amazon.com

     

     

    댓글

Designed by Tistory.