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

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

AWS SDK for Java を通じてオブジェクトをダウンロードすると、Amazon S3 はオブジェクトのすべてのメタデータと、オブジェクトのコンテンツを読み取る入力ストリームを返します。

オブジェクトを取得するには、次の操作を行います。

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

  • いずれかの S3Object インスタンスメソッドを実行して、入力ストリームを処理します。

注記

ネットワーク接続は、すべてのデータを読み取るか、入力ストリームを閉じるまで開いたままになります。ストリーミングのコンテンツは可能な限り迅速に読み取ることをお勧めします。

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

  • オブジェクト全体を読み取る代わりに、リクエスト内でバイト範囲を指定して、オブジェクトデータの一部だけを読み取ることができます。

  • オプションで、ResponseHeaderOverrides オブジェクトを使用してリクエストヘッダー値を上書きし (「オブジェクトの取得」を参照)、対応するリクエストプロパティを設定できます。たとえば、この機能を使用すると、オブジェクトキー名とは異なるファイル名のファイルにオブジェクトをダウンロードするよう指定することができます。

次の例では、Amazon S3 バケットから 3 つの方法で (最初に完全なバケットとして、次にオブジェクトからのバイト範囲として、次に上書きされたレスポンスヘッダー値を持つ完全なオブジェクトとして)、オブジェクトを取得します。Amazon S3 からのオブジェクト取得の詳細については、「GET オブジェクト」を参照してください。作業サンプルを作成およびテストする方法については、「Amazon S3 Java コード例のテスト」を参照してください。

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.GetObjectRequest; import com.amazonaws.services.s3.model.ResponseHeaderOverrides; import com.amazonaws.services.s3.model.S3Object; public class GetObject { public static void main(String[] args) throws IOException { String clientRegion = "*** Client region ***"; String bucketName = "*** Bucket name ***"; String key = "*** Object key ***"; S3Object fullObject = null, objectPortion = null, headerOverrideObject = null; try { AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withRegion(clientRegion) .withCredentials(new ProfileCredentialsProvider()) .build(); // Get an object and print its contents. System.out.println("Downloading an object"); fullObject = s3Client.getObject(new GetObjectRequest(bucketName, key)); System.out.println("Content-Type: " + fullObject.getObjectMetadata().getContentType()); System.out.println("Content: "); displayTextInputStream(fullObject.getObjectContent()); // Get a range of bytes from an object and print the bytes. GetObjectRequest rangeObjectRequest = new GetObjectRequest(bucketName, key) .withRange(0,9); objectPortion = s3Client.getObject(rangeObjectRequest); System.out.println("Printing bytes retrieved."); displayTextInputStream(objectPortion.getObjectContent()); // Get an entire object, overriding the specified response headers, and print the object's content. ResponseHeaderOverrides headerOverrides = new ResponseHeaderOverrides() .withCacheControl("No-cache") .withContentDisposition("attachment; filename=example.txt"); GetObjectRequest getObjectRequestHeaderOverride = new GetObjectRequest(bucketName, key) .withResponseHeaders(headerOverrides); headerOverrideObject = s3Client.getObject(getObjectRequestHeaderOverride); displayTextInputStream(headerOverrideObject.getObjectContent()); } catch(AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } catch(SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client // couldn't parse the response from Amazon S3. e.printStackTrace(); } finally { // To ensure that the network connection doesn't remain open, close any open input streams. if(fullObject != null) { fullObject.close(); } if(objectPortion != null) { objectPortion.close(); } if(headerOverrideObject != null) { headerOverrideObject.close(); } } } private static void displayTextInputStream(InputStream input) throws IOException { // Read the text input stream one line at a time and display each line. BufferedReader reader = new BufferedReader(new InputStreamReader(input)); String line = null; while ((line = reader.readLine()) != null) { System.out.println(line); } System.out.println(); } }