Amazon Simple Storage Service
開発者ガイド (API バージョン 2006-03-01)

AWS SDK for .NET を使用したオブジェクトの取得

オブジェクトをダウンロードするときは、オブジェクトのメタデータと、コンテンツの読み取り元のストリームがすべて取得されます。ストリームコンテンツの読み取りはなるべく短時間で行う必要があります。データは Amazon S3 から直接ストリーミングされ、すべてのデータの読み取りが完了するか、入力ストリームを閉じるまで、ネットワーク接続は開いたままになるからです。オブジェクトを取得するには、次の操作を行います。

  • バケット名とオブジェクトキーをリクエストに含めて、getObject メソッドを実行します。

  • いずれかの GetObjectResponse メソッドを実行して、ストリームを処理します。

次に、使用のバリエーションをいくつか示します。

  • オブジェクト全体を読み取る代わりに、オブジェクトデータの一部だけを読み取るには、次の C# の例に示すとおり、リクエスト内でバイト範囲を指定します。

    GetObjectRequest request = new GetObjectRequest { BucketName = bucketName, Key = keyName, ByteRange = new ByteRange(0, 10) };
  • オブジェクトを取得するときに、オプションで、ResponseHeaderOverrides オブジェクトを使用してリクエストヘッダー値を上書きし (「オブジェクトの取得」を参照)、対応するリクエストプロパティを設定できます。次の C# コード例は、これを実行する方法を説明しています。たとえば、この機能を使用すると、オブジェクトキー名とは異なるファイル名のファイルにオブジェクトをダウンロードするよう指定することができます。

    GetObjectRequest request = new GetObjectRequest { BucketName = bucketName, Key = keyName }; ResponseHeaderOverrides responseHeaders = new ResponseHeaderOverrides(); responseHeaders.CacheControl = "No-cache"; responseHeaders.ContentDisposition = "attachment; filename=testing.txt"; request.ResponseHeaderOverrides = responseHeaders;

次の C# コード例では、Amazon S3 バケットからオブジェクトを取得します。この例では、GetObjectResponse.ResponseStream プロパティを使用してレスポンスからオブジェクトデータを読み取っています。この例はまた、GetObjectResponse.Metadata コレクションを使用してオブジェクトのメタデータを読み取る方法も示しています。取得するオブジェクトに x-amz-meta-title 値がある場合は、コードがそのメタデータ値を出力します。

作業サンプルを作成およびテストする方法については、「Amazon S3 .NET コード例の実行」を参照してください。

// Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-s3-developer-guide/blob/master/LICENSE-SAMPLECODE.) using Amazon.S3; using Amazon.S3.Model; using System; using System.IO; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class GetObjectTest { private const string bucketName = "*** bucket name ***"; private const string keyName = "*** object key ***"; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 client; public static void Main() { client = new AmazonS3Client(bucketRegion); ReadObjectDataAsync().Wait(); } static async Task ReadObjectDataAsync() { string responseBody = ""; try { GetObjectRequest request = new GetObjectRequest { BucketName = bucketName, Key = keyName }; using (GetObjectResponse response = await client.GetObjectAsync(request)) using (Stream responseStream = response.ResponseStream) using (StreamReader reader = new StreamReader(responseStream)) { string title = response.Metadata["x-amz-meta-title"]; // Assume you have "title" as medata added to the object. string contentType = response.Headers["Content-Type"]; Console.WriteLine("Object metadata, Title: {0}", title); Console.WriteLine("Content type: {0}", contentType); responseBody = reader.ReadToEnd(); // Now you process the response body. } } catch (AmazonS3Exception e) { Console.WriteLine("Error encountered ***. Message:'{0}' when writing an object", e.Message); } catch (Exception e) { Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message); } } } }