Java용 AWS SDK
개발자 가이드

Amazon S3 객체 작업 수행

Amazon S3 객체는 데이터 모음 또는 파일을 나타냅니다. 각 객체는 버킷 안에 상주해야 합니다.

참고

이 코드 예제에서는 개발자가 Java용 AWS SDK 사용의 내용을 이해하고 개발을 위한 AWS 자격 증명 및 리전 설정의 정보를 사용하여 기본 AWS 자격 증명을 구성했다고 가정합니다.

객체 업로드

업로드할 버킷 이름, 키 이름 및 파일을 지정하여 AmazonS3 클라이언트의 putObject 메서드를 사용합니다. 버킷 이름이 존재해야 합니다. 그렇지 않으면 오류가 발생합니다.

가져오기

import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3;

코드

System.out.format("Uploading %s to S3 bucket %s...\n", file_path, bucket_name); final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build(); try { s3.putObject(bucket_name, key_name, new File(file_path)); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1);

GitHub의 전체 예제를 참조하십시오.

객체 목록 생성

버킷 내에서 객체 목록을 가져오려면 버킷 이름을 지정하여 AmazonS3 클라이언트의 listObjects 메서드를 사용합니다.

listObjects 메서드는 버킷의 객체에 대한 정보를 제공하는 ObjectListing 객체를 반환합니다. 객체 이름(키)을 나열하려면 getObjectSummaries 메서드를 사용하여 S3ObjectSummary 객체 목록을 가져옵니다. 이때 각 객체는 버킷에 있는 단일 객체를 나타냅니다. 그런 다음 getKey 메서드를 호출하여 객체의 이름을 가져옵니다.

가져오기

import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.ListObjectsV2Result; import com.amazonaws.services.s3.model.S3ObjectSummary;

코드

System.out.format("Objects in S3 bucket %s:\n", bucket_name); final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build(); ListObjectsV2Result result = s3.listObjectsV2(bucket_name); List<S3ObjectSummary> objects = result.getObjectSummaries(); for (S3ObjectSummary os : objects) { System.out.println("* " + os.getKey()); }

GitHub의 전체 예제를 참조하십시오.

객체 다운로드

AmazonS3 클라이언트의 getObject 메서드를 사용하여 다운로드할 버킷 이름 및 객체를 전달합니다. 성공하면 이 메서드는 S3Object를 반환합니다. 지정한 버킷 및 객체 키가 존재해야 합니다. 그렇지 않으면 오류가 발생합니다.

S3Object에 대해 getObjectContent를 호출하여 객체의 내용을 가져올 수 있습니다. 그러면 표준 Java InputStream 객체로 작동하는 S3ObjectInputStream이 반환됩니다.

다음 예제는 S3에서 객체를 다운로드하고 이 객체의 내용을 (객체 키와 동일한 이름을 사용하여) 파일에 저장합니다.

가져오기

import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.S3Object; import com.amazonaws.services.s3.model.S3ObjectInputStream; import java.io.File;

코드

System.out.format("Downloading %s from S3 bucket %s...\n", key_name, bucket_name); final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build(); try { S3Object o = s3.getObject(bucket_name, key_name); S3ObjectInputStream s3is = o.getObjectContent(); FileOutputStream fos = new FileOutputStream(new File(key_name)); byte[] read_buf = new byte[1024]; int read_len = 0; while ((read_len = s3is.read(read_buf)) > 0) { fos.write(read_buf, 0, read_len); } s3is.close(); fos.close(); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } catch (FileNotFoundException e) { System.err.println(e.getMessage()); System.exit(1); } catch (IOException e) { System.err.println(e.getMessage()); System.exit(1);

GitHub의 전체 예제를 참조하십시오.

객체 복사, 이동 또는 이름 바꾸기

AmazonS3 클라이언트의 copyObject 메서드를 사용하여 한 버킷에서 다른 버킷으로 객체를 복사할 수 있습니다. 복사해 객체가 있는 소스 버킷의 이름, 복사할 객체 및 대상 버킷 및 이름을 가져옵니다.

가져오기

import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions;

코드

final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build(); try { s3.copyObject(from_bucket, object_key, to_bucket, object_key); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }

GitHub의 전체 예제를 참조하십시오.

참고

copyObjectdeleteObject를 함께 사용하면 먼저 객체를 새 이름으로 복사한 다음(동일한 버킷을 소스와 대상으로 모두 사용 가능) 이전 위치에서 해당 객체를 삭제하는 방식으로 객체를 이동하거나 이름을 바꿀 수 있습니다.

객체 삭제

AmazonS3 클라이언트의 deleteObject 메서드를 사용하여 삭제할 버킷 이름 및 객체를 전달합니다. 지정한 버킷 및 객체 키가 존재해야 합니다. 그렇지 않으면 오류가 발생합니다.

가져오기

import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions;

코드

final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build(); try { s3.deleteObject(bucket_name, object_key); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }

GitHub의 전체 예제를 참조하십시오.

여러 객체를 한 번에 삭제

AmazonS3 클라이언트의 deleteObjects 메서드를 사용하면 이름을 DeleteObjectRequest withKeys 메서드로 전달하여 동일 버킷에서 여러 객체를 삭제할 수 있습니다.

가져오기

import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3;

코드

final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build(); try { DeleteObjectsRequest dor = new DeleteObjectsRequest(bucket_name) .withKeys(object_keys); s3.deleteObjects(dor); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1);

GitHub의 전체 예제를 참조하십시오.