メニュー
Amazon Simple Storage Service
開発者ガイド (API Version 2006-03-01)

ファイルのアップロード

以下のタスクは、低レベル .NET クラスを使用して、ファイルをアップロードする手順を示しています。

低レベル API のファイルアップロードプロセス

1

AWS 認証情報を指定して、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 メソッドを実行して、マルチパートアップロードを完了します。

以下の C# コード例は、前述のタスクの例です。

Copy
IAmazonS3 s3Client = new AmazonS3Client(Amazon.RegionEndpoint.USEast1); // List to store upload part responses. List<UploadPartResponse> uploadResponses = new List<UploadPartResponse>(); // 1. Initialize. InitiateMultipartUploadRequest initiateRequest = new InitiateMultipartUploadRequest { BucketName = existingBucketName, Key = keyName }; InitiateMultipartUploadResponse initResponse = s3Client.InitiateMultipartUpload(initRequest); // 2. Upload Parts. long contentLength = new FileInfo(filePath).Length; long partSize = 5242880; // 5 MB try { long filePosition = 0; for (int i = 1; filePosition < contentLength; i++) { // Create request to upload a part. UploadPartRequest uploadRequest = new UploadPartRequest { BucketName = existingBucketName, Key = keyName, UploadId = initResponse.UploadId, PartNumber = i, PartSize = partSize, FilePosition = filePosition, FilePath = filePath }; // Upload part and add response to our list. uploadResponses.Add(s3Client.UploadPart(uploadRequest)); filePosition += partSize; } // Step 3: complete. CompleteMultipartUploadRequest completeRequest = new CompleteMultipartUploadRequest { BucketName = existingBucketName, Key = keyName, UploadId = initResponse.UploadId, }; CompleteMultipartUploadResponse completeUploadResponse = s3Client.CompleteMultipartUpload(completeRequest); } catch (Exception exception) { Console.WriteLine("Exception occurred: {0}", exception.Message); AbortMultipartUploadRequest abortMPURequest = new AbortMultipartUploadRequest { BucketName = existingBucketName, Key = keyName, UploadId = initResponse.UploadId }; s3Client.AbortMultipartUpload(abortMPURequest); }

注記

.NET API を使用して大きなオブジェクトをアップロードする場合、データがリクエストストリームに書き込まれる間にも、タイムアウトが発生することがあります。UploadPartRequest を使用して、明示的なタイムアウトを設定することができます。

以下の C# コード例では、ファイルを Amazon S3 バケットにアップロードしています。作業サンプルを作成およびテストする方法については、「.NET コード例のテスト」を参照してください。

Copy
using System; using System.Collections.Generic; using System.IO; using Amazon.S3; using Amazon.S3.Model; namespace s3.amazon.com.docsamples { class UploadFileMPULowLevelAPI { static string existingBucketName = "*** bucket name ***"; static string keyName = "*** key name ***"; static string filePath = "*** file path ***"; static void Main(string[] args) { IAmazonS3 s3Client = new AmazonS3Client(Amazon.RegionEndpoint.USEast1); // List to store upload part responses. List<UploadPartResponse> uploadResponses = new List<UploadPartResponse>(); // 1. Initialize. InitiateMultipartUploadRequest initiateRequest = new InitiateMultipartUploadRequest { BucketName = existingBucketName, Key = keyName }; InitiateMultipartUploadResponse initResponse = s3Client.InitiateMultipartUpload(initiateRequest); // 2. Upload Parts. long contentLength = new FileInfo(filePath).Length; long partSize = 5 * (long)Math.Pow(2, 20); // 5 MB try { long filePosition = 0; for (int i = 1; filePosition < contentLength; i++) { UploadPartRequest uploadRequest = new UploadPartRequest { BucketName = existingBucketName, Key = keyName, UploadId = initResponse.UploadId, PartNumber = i, PartSize = partSize, FilePosition = filePosition, FilePath = filePath }; // Upload part and add response to our list. uploadResponses.Add(s3Client.UploadPart(uploadRequest)); filePosition += partSize; } // Step 3: complete. CompleteMultipartUploadRequest completeRequest = new CompleteMultipartUploadRequest { BucketName = existingBucketName, Key = keyName, UploadId = initResponse.UploadId, //PartETags = new List<PartETag>(uploadResponses) }; completeRequest.AddPartETags(uploadResponses); CompleteMultipartUploadResponse completeUploadResponse = s3Client.CompleteMultipartUpload(completeRequest); } catch (Exception exception) { Console.WriteLine("Exception occurred: {0}", exception.Message); AbortMultipartUploadRequest abortMPURequest = new AbortMultipartUploadRequest { BucketName = existingBucketName, Key = keyName, UploadId = initResponse.UploadId }; s3Client.AbortMultipartUpload(abortMPURequest); } } } }