메뉴
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();

수정 시간, ETag와 같은 조건을 기준으로 객체를 다운로드하거나 객체의 특정 범위만 선택하여 다운로드하는 등, GetObjectRequest 객체는 여러 가지 객체 다운로드 옵션을 제공합니다. 다음 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();

객체를 검색할 때 필요할 경우 ResponseHeaderOverrides 객체를 사용하여 다음 Java 코드 예제와 같이 해당 요청 속성을 설정하여 응답 헤더 값을 무시할 수 있습니다(객체 가져오기 참조).

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(); } }