메뉴
Amazon Simple Storage Service
개발자 안내서 (API Version 2006-03-01)

파일 업로드

다음 작업은 하위 수준 Java 클래스를 사용하여 파일을 업로드하는 방법을 보여줍니다.

하위 수준 API 파일 업로드 프로세스

1

AmazonS3Client 클래스의 인스턴스를 만듭니다.

2

AmazonS3Client.initiateMultipartUpload 메서드를 실행하여 멀티파트 업로드를 시작합니다. InitiateMultipartUploadRequest 클래스의 인스턴스를 만들어 멀티파트 업로드를 시작하기 위해 버킷 이름과 키 이름 등 필수 정보를 제공할 필요는 없습니다.

3

AmazonS3Client.initiateMultipartUpload 메서드가 반환하는 업로드 ID를 저장합니다. 이후의 멀티파트 업로드 작업에서 이 업로드 ID를 제공해야 합니다.

4

부분을 업로드합니다. 각 파트 업로드에 대해 AmazonS3Client.uploadPart 메서드를 실행합니다. 업로드 ID, 버킷 이름, 부분 번호 등 파트 업로드 정보를 제공해야 합니다. UploadPartRequest 클래스의 인스턴스를 만들어 이 정보를 제공합니다.

5

목록의 AmazonS3Client.uploadPart 메서드에 대한 응답을 저장합니다. 이 응답은 멀티파트 업로드를 완료하기 위해 필요한 ETag 값과 부분 번호를 포함합니다.

6

각 파트에 대해 4-5 작업을 반복합니다.

7

AmazonS3Client.completeMultipartUpload 메서드를 실행하여 멀티파트 업로드를 완료합니다.

다음은 위에서 설명한 작업을 실행하는 Java 코드 샘플입니다.

Copy
AmazonS3 s3Client = new AmazonS3Client(new ProfileCredentialsProvider()); // Create a list of UploadPartResponse objects. You get one of these for // each part upload. List<PartETag> partETags = new ArrayList<PartETag>(); // Step 1: Initialize. InitiateMultipartUploadRequest initRequest = new InitiateMultipartUploadRequest( existingBucketName, keyName); InitiateMultipartUploadResult initResponse = s3Client.initiateMultipartUpload(initRequest); File file = new File(filePath); long contentLength = file.length(); long partSize = 5 * 1024 * 1024; // Set part size to 5 MB. try { // Step 2: Upload parts. long filePosition = 0; for (int i = 1; filePosition < contentLength; i++) { // Last part can be less than 5 MB. Adjust part size. partSize = Math.min(partSize, (contentLength - filePosition)); // Create request to upload a part. UploadPartRequest uploadRequest = new UploadPartRequest() .withBucketName(existingBucketName).withKey(keyName) .withUploadId(initResponse.getUploadId()).withPartNumber(i) .withFileOffset(filePosition) .withFile(file) .withPartSize(partSize); // Upload part and add response to our list. partETags.add(s3Client.uploadPart(uploadRequest).getPartETag()); filePosition += partSize; } // Step 3: Complete. CompleteMultipartUploadRequest compRequest = new CompleteMultipartUploadRequest(existingBucketName, keyName, initResponse.getUploadId(), partETags); s3Client.completeMultipartUpload(compRequest); } catch (Exception e) { s3Client.abortMultipartUpload(new AbortMultipartUploadRequest( existingBucketName, keyName, initResponse.getUploadId())); }

다음 Java 코드 예제는 Amazon S3 버킷에 파일을 업로드합니다. 실제 예제를 작성하여 테스트하는 방법에 대한 자세한 내용은 Java 코드 예제 테스트를 참조하십시오.

Copy
import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.model.AbortMultipartUploadRequest; import com.amazonaws.services.s3.model.CompleteMultipartUploadRequest; import com.amazonaws.services.s3.model.InitiateMultipartUploadRequest; import com.amazonaws.services.s3.model.InitiateMultipartUploadResult; import com.amazonaws.services.s3.model.PartETag; import com.amazonaws.services.s3.model.UploadPartRequest; public class UploadObjectMPULowLevelAPI { public static void main(String[] args) throws IOException { String existingBucketName = "*** Provide-Your-Existing-BucketName ***"; String keyName = "*** Provide-Key-Name ***"; String filePath = "*** Provide-File-Path ***"; AmazonS3 s3Client = new AmazonS3Client(new ProfileCredentialsProvider()); // Create a list of UploadPartResponse objects. You get one of these // for each part upload. List<PartETag> partETags = new ArrayList<PartETag>(); // Step 1: Initialize. InitiateMultipartUploadRequest initRequest = new InitiateMultipartUploadRequest(existingBucketName, keyName); InitiateMultipartUploadResult initResponse = s3Client.initiateMultipartUpload(initRequest); File file = new File(filePath); long contentLength = file.length(); long partSize = 5242880; // Set part size to 5 MB. try { // Step 2: Upload parts. long filePosition = 0; for (int i = 1; filePosition < contentLength; i++) { // Last part can be less than 5 MB. Adjust part size. partSize = Math.min(partSize, (contentLength - filePosition)); // Create request to upload a part. UploadPartRequest uploadRequest = new UploadPartRequest() .withBucketName(existingBucketName).withKey(keyName) .withUploadId(initResponse.getUploadId()).withPartNumber(i) .withFileOffset(filePosition) .withFile(file) .withPartSize(partSize); // Upload part and add response to our list. partETags.add( s3Client.uploadPart(uploadRequest).getPartETag()); filePosition += partSize; } // Step 3: Complete. CompleteMultipartUploadRequest compRequest = new CompleteMultipartUploadRequest( existingBucketName, keyName, initResponse.getUploadId(), partETags); s3Client.completeMultipartUpload(compRequest); } catch (Exception e) { s3Client.abortMultipartUpload(new AbortMultipartUploadRequest( existingBucketName, keyName, initResponse.getUploadId())); } } }