メニュー
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())); } } }