Amazon Simple Storage Service
개발자 안내서 (API 버전 2006-03-01)

AWS SDK for Java를 사용하여 객체 가져오기

AWS SDK for Java를 통해 객체를 다운로드하면 Amazon S3가 모든 객체의 메타데이터와 객체의 콘텐츠를 읽기 위한 입력 스트림을 반환합니다.

객체를 검색하려면 다음을 수행합니다.

  • 요청에 버킷 이름과 객체 키를 제공하여 AmazonS3Client.getObject() 메서드를 실행합니다.

  • S3Object 인스턴스 메서드 중 하나를 실행하여 입력 스트림을 처리합니다.

참고

모든 데이터를 읽거나 입력 스트림을 닫을 때까지 네트워크 연결이 열린 상태로 유지됩니다. 따라서 최대한 빨리 스트림의 콘텐츠를 읽는 것이 좋습니다.

다음은 사용할 수 있는 몇 가지 변형 형태입니다.

  • 전체 객체를 읽는 대신, 요청에서 원하는 바이트 범위를 지정하여 객체 데이터의 일부만 읽을 수 있습니다.

  • ResponseHeaderOverrides 객체를 사용하고 해당 요청 속성을 설정하여 필요할 경우 응답 헤더 값을 무시할 수 있습니다(객체 가져오기 참조). 예를 들어 이 기능을 사용하여 객체 키 이름과 다른 파일 이름을 가진 파일로 다운로드해야 할 객체를 지정할 수 있습니다.

다음 예제에서는 세 가지 방법으로 Amazon S3 버킷에서 객체를 검색합니다. 먼저 전체 객체로, 그 다음은 객체의 바이트 범위로, 그 다음은 무시된 응답 헤더 값을 가진 전체 객체로 검색합니다. Amazon S3에서 객체 가져오기에 대한 자세한 내용은 GET Object 단원을 참조하십시오. 실제 예제를 작성 및 테스트하는 방법에 대한 자세한 내용은 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(); } }