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

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

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

オブジェクトのダウンロード

1

AmazonS3Client クラスのインスタンスを作成します。

2

いずれかの AmazonS3Client.getObject() メソッドを実行します。バケット名やキー名などのリクエスト情報を提供する必要があります。この情報は、GetObjectRequest クラスのインスタンスを作成することによって指定します。

3

返されるオブジェクトに対していずれかの getObjectContent() メソッドを実行してオブジェクトデータに関するストリームを取得し、レスポンスを処理します。

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

Copy
AmazonS3 s3Client = new AmazonS3Client(new ProfileCredentialsProvider()); S3Object object = s3Client.getObject( new GetObjectRequest(bucketName, key)); InputStream objectData = object.getObjectContent(); // Process the objectData stream. objectData.close();

GetObjectRequest オブジェクトではいくつかのオプションを利用できます。例えば、変更時間や ETag に基づいてオブジェクトを条件付きでダウンロードしたり、オブジェクトの範囲を部分的にダウンロードしたりできます。次の Java サンプルコードは、オブジェクトから取得するデータバイトの範囲を指定する方法を示しています。

Copy
AmazonS3 s3Client = new AmazonS3Client(new ProfileCredentialsProvider()); GetObjectRequest rangeObjectRequest = new GetObjectRequest( bucketName, key); rangeObjectRequest.setRange(0, 10); // retrieve 1st 11 bytes. S3Object objectPortion = s3Client.getObject(rangeObjectRequest); InputStream objectData = objectPortion.getObjectContent(); // Process the objectData stream. objectData.close();

オブジェクトを取得するときは、オプションでレスポンスヘッダーの値を上書きすることもできます(オブジェクトの取得 を参照)。その場合は、次の Java サンプルコードに示すとおり、ResponseHeaderOverrides オブジェクトを使用して、対応するリクエストプロパティを設定します。

Copy
GetObjectRequest request = new GetObjectRequest(bucketName, key); ResponseHeaderOverrides responseHeaders = new ResponseHeaderOverrides(); responseHeaders.setCacheControl("No-cache"); responseHeaders.setContentDisposition("attachment; filename=testing.txt"); // Add the ResponseHeaderOverides to the request. request.setResponseHeaders(responseHeaders);

次の Java コード例では、指定した Amazon S3 バケットからオブジェクトを取得します。作業サンプルを作成およびテストする方法については、「Java コード例のテスト」を参照してください。

Copy
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import com.amazonaws.AmazonClientException; import com.amazonaws.AmazonServiceException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.model.GetObjectRequest; import com.amazonaws.services.s3.model.S3Object; public class GetObject { private static String bucketName = "*** provide bucket name ***"; private static String key = "*** provide object key ***"; public static void main(String[] args) throws IOException { AmazonS3 s3Client = new AmazonS3Client(new ProfileCredentialsProvider()); try { System.out.println("Downloading an object"); S3Object s3object = s3Client.getObject(new GetObjectRequest( bucketName, key)); System.out.println("Content-Type: " + s3object.getObjectMetadata().getContentType()); displayTextInputStream(s3object.getObjectContent()); // Get a range of bytes from an object. GetObjectRequest rangeObjectRequest = new GetObjectRequest( bucketName, key); rangeObjectRequest.setRange(0, 10); S3Object objectPortion = s3Client.getObject(rangeObjectRequest); System.out.println("Printing bytes retrieved."); displayTextInputStream(objectPortion.getObjectContent()); } catch (AmazonServiceException ase) { System.out.println("Caught an AmazonServiceException, which" + " means your request made it " + "to Amazon S3, but was rejected with an error response" + " for some reason."); System.out.println("Error Message: " + ase.getMessage()); System.out.println("HTTP Status Code: " + ase.getStatusCode()); System.out.println("AWS Error Code: " + ase.getErrorCode()); System.out.println("Error Type: " + ase.getErrorType()); System.out.println("Request ID: " + ase.getRequestId()); } catch (AmazonClientException ace) { System.out.println("Caught an AmazonClientException, which means"+ " the client encountered " + "an internal error while trying to " + "communicate with S3, " + "such as not being able to access the network."); System.out.println("Error Message: " + ace.getMessage()); } } private static void displayTextInputStream(InputStream input) throws IOException { // Read one text line at a time and display. BufferedReader reader = new BufferedReader(new InputStreamReader(input)); while (true) { String line = reader.readLine(); if (line == null) break; System.out.println(" " + line); } System.out.println(); } }