AWS SDK for Java 1.x는 2024년 7월 31일부터 유지 관리 모드로 전환되었으며 2025년 12월 31end-of-support
기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon S3 객체에 대한 작업 수행
Amazon S3 객체는 데이터 모음 또는 파일을 나타냅니다. 각 객체는 버킷 안에 상주해야 합니다.
참고
이 코드 예제에서는 사용자가 AWS SDK for Java 사용의 내용을 이해하고 개발을 위한 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
를 호출하여 객체의 내용을 가져올 수 있습니다. 그러면 표준 자바 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;
코드
try { s3.copyObject(from_bucket, object_key, to_bucket, object_key); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } System.out.println("Done!");
GitHub의 전체 예제
참고
copyObject
와 deleteObject를 함께 사용하면 먼저 객체를 새 이름으로 복사한 다음(동일한 버킷을 소스와 대상으로 모두 사용 가능) 이전 위치에서 해당 객체를 삭제하는 방식으로 객체를 이동하거나 이름을 바꿀 수 있습니다.
객체 삭제
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의 전체 예제
여러 객체를 한 번에 삭제
Amazon S3 클라이언트의 deleteObjects
메서드를 사용하면 link:sdk-for-java/v1/reference/com/amazonaws/services/s3/model/DeleteObjectsRequest.html 메서드에 해당 이름을 전달하여 동일한 버킷에서 여러 객체를 삭제할 수 있습니다.
가져오기
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의 전체 예제