

 AWS SDK for Java 1.x는 2025년 12월 31일에 end-of-support되었습니다. 새로운 기능, 가용성 개선 및 보안 업데이트를 계속 받으려면 [AWS SDK for Java 2.x](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/home.html)로 마이그레이션하는 것이 좋습니다.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon S3 운영을 위한 TransferManager 사용
<a name="examples-s3-transfermanager"></a>

AWS SDK for Java TransferManager 클래스를 사용하여 로컬 환경에서 Amazon S3로 파일을 안정적으로 전송하고 한 S3 위치에서 다른 위치로 객체를 복사할 수 있습니다. `TransferManager`는 전송 진행 상황을 가져오고 업로드 및 다운로드를 일시 중지 또는 재개할 수 있습니다.

**참고**  
모범 사례  
Amazon S3 버킷에서 [AbortIncompleteMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTlifecycle.html) 수명 주기 규칙을 활성화하는 것이 좋습니다.  
이 규칙은 시작된 후 지정된 일수 내에 완료되지 않은 멀티파트 업로드를 중단하도록 Amazon S3에 지시합니다. 설정된 시간 제한을 초과하면 Amazon S3가 업로드를 중단한 후 완료되지 않은 업로드 데이터를 삭제합니다.  
자세한 내용은 Amazon S3 사용 설명서의 [버전 관리가 포함된 버킷의 수명 주기 구성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-configuration-bucket-with-versioning.html)을 참조하세요.

**참고**  
이 코드 예제에서는 사용자가 [AWS SDK for Java 사용](basics.md)의 내용을 이해하고 [개발을 위한 AWS 자격 증명 및 리전 설정](setup-credentials.md)의 정보를 사용하여 기본 AWS 자격 증명을 구성했다고 가정합니다.

## 파일 및 디렉터리 업로드
<a name="transfermanager-uploading"></a>

TransferManager는 [이전에 생성한](examples-s3-buckets.md#create-bucket) 모든 Amazon S3 버킷에 파일, 파일 목록 및 디렉터리를 업로드할 수 있습니다.

**Topics**
+ [단일 파일 업로드](#transfermanager-upload-file)
+ [파일 목록 업로드](#transfermanager-upload-file-list)
+ [디렉터리 업로드](#transfermanager-upload-directory)

### 단일 파일 업로드
<a name="transfermanager-upload-file"></a>

TransferManager의 `upload` 메서드를 호출하여 Amazon S3 버킷 이름, 키(객체) 이름, 업로드할 파일을 나타내는 표준 Java [File](https://docs.oracle.com/javase/8/docs/api/index.html?java/io/File.html) 객체를 입력합니다.

 **가져옵니다**.

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.s3.transfer.MultipleFileUpload;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;
import com.amazonaws.services.s3.transfer.Upload;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
```

 ** 코드** 

```
File f = new File(file_path);
TransferManager xfer_mgr = TransferManagerBuilder.standard().build();
try {
    Upload xfer = xfer_mgr.upload(bucket_name, key_name, f);
    // loop with Transfer.isDone()
    XferMgrProgress.showTransferProgress(xfer);
    //  or block with Transfer.waitForCompletion()
    XferMgrProgress.waitForCompletion(xfer);
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
xfer_mgr.shutdownNow();
```

`upload` 메서드는 (값을) *즉시* 반환하며, 전송 상태를 확인하거나 완료될 때까지 대기하는 데 사용할 `Upload` 객체를 제공합니다.

TransferManager의 `shutdownNow` 메서드를 호출하기 전에 전송을 성공적으로 완료하는 데 `waitForCompletion`를 사용하는 방법에 대한 자세한 내용은 [전송이 완료될 때까지 대기](#transfermanager-wait-for-completion)를 참조하세요. 전송이 완료될 때까지 대기하는 동안 상태 및 진행 상황에 대한 업데이트를 폴링하거나 수신 대기할 수 있습니다. 자세한 내용은 [전송 상태 및 진행 상황 가져오기](#transfermanager-get-status-and-progress)를 참조하십시오.

GitHub의 [전체 예제](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/XferMgrUpload.java)를 참조하세요.

### 파일 목록 업로드
<a name="transfermanager-upload-file-list"></a>

여러 파일을 한 번에 업로드하려면 다음을 지정하여 TransferManager `uploadFileList` 메서드를 호출합니다.
+ Amazon S3 버킷 이름
+ *키 접두사* - 생성된 객체의 이름(객체를 넣을 버킷 내 경로) 앞에 붙습니다.
+ [File](https://docs.oracle.com/javase/8/docs/api/index.html?java/io/File.html) 객체 - 파일 경로를 생성할 상대 디렉터리를 나타냅니다.
+ [List](https://docs.oracle.com/javase/8/docs/api/index.html?java/util/List.html) 객체 - 업로드할 [File](https://docs.oracle.com/javase/8/docs/api/index.html?java/io/File.html) 객체 세트를 포함합니다.

 **가져옵니다**.

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.s3.transfer.MultipleFileUpload;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;
import com.amazonaws.services.s3.transfer.Upload;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
```

 ** 코드** 

```
ArrayList<File> files = new ArrayList<File>();
for (String path : file_paths) {
    files.add(new File(path));
}

TransferManager xfer_mgr = TransferManagerBuilder.standard().build();
try {
    MultipleFileUpload xfer = xfer_mgr.uploadFileList(bucket_name,
            key_prefix, new File("."), files);
    // loop with Transfer.isDone()
    XferMgrProgress.showTransferProgress(xfer);
    // or block with Transfer.waitForCompletion()
    XferMgrProgress.waitForCompletion(xfer);
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
xfer_mgr.shutdownNow();
```

TransferManager의 `shutdownNow` 메서드를 호출하기 전에 전송을 성공적으로 완료하는 데 `waitForCompletion`를 사용하는 방법에 대한 자세한 내용은 [전송이 완료될 때까지](#transfermanager-wait-for-completion) 대기를 참조하세요. 전송이 완료될 때까지 대기하는 동안 상태 및 진행 상황에 대한 업데이트를 폴링하거나 수신 대기할 수 있습니다. 자세한 내용은 [전송 상태 및 진행 상황 가져오기](#transfermanager-get-status-and-progress)를 참조하십시오.

`uploadFileList`에서 반환한 [MultipleFileUpload](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/MultipleFileUpload.html) 객체를 사용하여 전송 상태 또는 진행 상황을 쿼리할 수 있습니다. 자세한 내용은 [현재 전송 진행 상황 폴링](#transfermanager-get-progress-polling) 및 [ProgressListener를 사용하여 전송 진행 상황 가져오기](#transfermanager-progress-listener)를 참조하십시오.

또한 `MultipleFileUpload`'s `getSubTransfers` 메서드를 사용하여 전송될 각 파일의 `Upload` 객체를 가져올 수도 있습니다. 자세한 내용은 [하위 전송 진행 상황 가져오기](#transfermanager-get-subtransfer-progress)를 참조하십시오.

GitHub의 [전체 예제](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/XferMgrUpload.java)를 참조하세요.

### 디렉터리 업로드
<a name="transfermanager-upload-directory"></a>

TransferManager의 `uploadDirectory` 메서드와 하위 디렉터리의 파일을 재귀적으로 복사하는 옵션을 사용하여 전체 파일 디렉터리를 업로드할 수 있습니다. Amazon S3 버킷 이름, S3 키 접두사, [File](https://docs.oracle.com/javase/8/docs/api/index.html?java/io/File.html) 객체(복사할 로컬 디렉터리를 나타냄) 및 `boolean` 값(하위 디렉터리를 재귀적으로 복사할지 여부를 나타내는 값으로, *true* 또는 *false*)을 제공합니다.

 **가져옵니다**.

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.s3.transfer.MultipleFileUpload;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;
import com.amazonaws.services.s3.transfer.Upload;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
```

 ** 코드** 

```
TransferManager xfer_mgr = TransferManagerBuilder.standard().build();
try {
    MultipleFileUpload xfer = xfer_mgr.uploadDirectory(bucket_name,
            key_prefix, new File(dir_path), recursive);
    // loop with Transfer.isDone()
    XferMgrProgress.showTransferProgress(xfer);
    // or block with Transfer.waitForCompletion()
    XferMgrProgress.waitForCompletion(xfer);
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
xfer_mgr.shutdownNow();
```

TransferManager의 `shutdownNow` 메서드를 호출하기 전에 전송을 성공적으로 완료하는 데 `waitForCompletion`를 사용하는 방법에 대한 자세한 내용은 [전송이 완료될 때까지](#transfermanager-wait-for-completion) 대기를 참조하세요. 전송이 완료될 때까지 대기하는 동안 상태 및 진행 상황에 대한 업데이트를 폴링하거나 수신 대기할 수 있습니다. 자세한 내용은 [전송 상태 및 진행 상황 가져오기](#transfermanager-get-status-and-progress)를 참조하십시오.

`uploadFileList`에서 반환한 [MultipleFileUpload](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/MultipleFileUpload.html) 객체를 사용하여 전송 상태 또는 진행 상황을 쿼리할 수 있습니다. 자세한 내용은 [현재 전송 진행 상황 폴링](#transfermanager-get-progress-polling) 및 [ProgressListener를 사용하여 전송 진행 상황 가져오기](#transfermanager-progress-listener)를 참조하십시오.

또한 `MultipleFileUpload`'s `getSubTransfers` 메서드를 사용하여 전송될 각 파일의 `Upload` 객체를 가져올 수도 있습니다. 자세한 내용은 [하위 전송 진행 상황 가져오기](#transfermanager-get-subtransfer-progress)를 참조하십시오.

GitHub의 [전체 예제](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/XferMgrUpload.java)를 참조하세요.

## 파일 또는 디렉터리 다운로드
<a name="transfermanager-downloading"></a>

TransferManager 클래스를 사용하여 Amazon S3에서 단일 파일(Amazon S3 객체) 또는 디렉터리(Amazon S3 버킷 이름 뒤에 객체 접두사 지정)를 다운로드할 수 있습니다.

**Topics**
+ [단일 파일 다운로드](#transfermanager-download-file)
+ [디렉터리 다운로드](#tranfermanager-download-directory)

### 단일 파일 다운로드
<a name="transfermanager-download-file"></a>

TransferManager의 `download` 메서드를 사용하여 다운로드할 객체를 포함하는 Amazon S3 버킷 이름, 키(객체) 이름 및 로컬 시스템에 생성할 파일을 나타내는 [File](https://docs.oracle.com/javase/8/docs/api/index.html?java/io/File.html) 객체를 지정합니다.

 **가져옵니다**.

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.s3.transfer.Download;
import com.amazonaws.services.s3.transfer.MultipleFileDownload;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;

import java.io.File;
```

 ** 코드** 

```
File f = new File(file_path);
TransferManager xfer_mgr = TransferManagerBuilder.standard().build();
try {
    Download xfer = xfer_mgr.download(bucket_name, key_name, f);
    // loop with Transfer.isDone()
    XferMgrProgress.showTransferProgress(xfer);
    // or block with Transfer.waitForCompletion()
    XferMgrProgress.waitForCompletion(xfer);
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
xfer_mgr.shutdownNow();
```

TransferManager의 `shutdownNow` 메서드를 호출하기 전에 전송을 성공적으로 완료하는 데 `waitForCompletion`를 사용하는 방법에 대한 자세한 내용은 [전송이 완료될 때까지](#transfermanager-wait-for-completion) 대기를 참조하세요. 전송이 완료될 때까지 대기하는 동안 상태 및 진행 상황에 대한 업데이트를 폴링하거나 수신 대기할 수 있습니다. 자세한 내용은 [전송 상태 및 진행 상황 가져오기](#transfermanager-get-status-and-progress)를 참조하십시오.

GitHub의 [전체 예제](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/XferMgrDownload.java)를 참조하세요.

### 디렉터리 다운로드
<a name="tranfermanager-download-directory"></a>

Amazon S3에서 공통 키 접두사(파일 시스템의 디렉터리와 유사)를 공유하는 파일 세트를 다운로드하려면 TransferManager `downloadDirectory` 메서드를 사용합니다. 이 메서드는 다운로드할 객체를 포함하는 Amazon S3 버킷 이름, 모든 객체에서 공유하는 객체 접두사, 그리고 파일을 로컬 시스템으로 다운로드할 디렉터리를 나타내는 [File](https://docs.oracle.com/javase/8/docs/api/index.html?java/io/File.html) 객체를 사용합니다. 이름이 지정된 디렉터리가 아직 없으면 생성됩니다.

 **가져옵니다**.

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.s3.transfer.Download;
import com.amazonaws.services.s3.transfer.MultipleFileDownload;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;

import java.io.File;
```

 ** 코드** 

```
TransferManager xfer_mgr = TransferManagerBuilder.standard().build();

try {
    MultipleFileDownload xfer = xfer_mgr.downloadDirectory(
            bucket_name, key_prefix, new File(dir_path));
    // loop with Transfer.isDone()
    XferMgrProgress.showTransferProgress(xfer);
    // or block with Transfer.waitForCompletion()
    XferMgrProgress.waitForCompletion(xfer);
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
xfer_mgr.shutdownNow();
```

TransferManager의 `shutdownNow` 메서드를 호출하기 전에 전송을 성공적으로 완료하는 데 `waitForCompletion`를 사용하는 방법에 대한 자세한 내용은 [전송이 완료될 때까지](#transfermanager-wait-for-completion) 대기를 참조하세요. 전송이 완료될 때까지 대기하는 동안 상태 및 진행 상황에 대한 업데이트를 폴링하거나 수신 대기할 수 있습니다. 자세한 내용은 [전송 상태 및 진행 상황 가져오기](#transfermanager-get-status-and-progress)를 참조하십시오.

GitHub의 [전체 예제](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/XferMgrDownload.java)를 참조하세요.

## 객체 복사
<a name="transfermanager-copy-object"></a>

한 S3 버킷에서 다른 버킷으로 객체를 복사하려면 TransferManager `copy` 메서드를 사용합니다.

 **가져옵니다**.

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.s3.transfer.Copy;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;
```

 ** 코드** 

```
System.out.println("Copying s3 object: " + from_key);
System.out.println("      from bucket: " + from_bucket);
System.out.println("     to s3 object: " + to_key);
System.out.println("        in bucket: " + to_bucket);

TransferManager xfer_mgr = TransferManagerBuilder.standard().build();
try {
    Copy xfer = xfer_mgr.copy(from_bucket, from_key, to_bucket, to_key);
    // loop with Transfer.isDone()
    XferMgrProgress.showTransferProgress(xfer);
    // or block with Transfer.waitForCompletion()
    XferMgrProgress.waitForCompletion(xfer);
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
xfer_mgr.shutdownNow();
```

GitHub의 [전체 예제](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/XferMgrCopy.java)를 참조하세요.

## 전송 완료 대기
<a name="transfermanager-wait-for-completion"></a>

전송이 완료될 때까지 애플리케이션(또는 스레드)을 차단할 수 있는 경우 [Transfer](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/Transfer.html) 인터페이스의 `waitForCompletion` 메서드를 사용하여 전송이 완료되거나 예외가 발생할 때까지 차단할 수 있습니다.

```
try {
    xfer.waitForCompletion();
} catch (AmazonServiceException e) {
    System.err.println("Amazon service error: " + e.getMessage());
    System.exit(1);
} catch (AmazonClientException e) {
    System.err.println("Amazon client error: " + e.getMessage());
    System.exit(1);
} catch (InterruptedException e) {
    System.err.println("Transfer interrupted: " + e.getMessage());
    System.exit(1);
}
```

`waitForCompletion`를 호출하기 *전에* 이벤트를 폴링하거나, 별도의 스레드에서 폴링 메커니즘을 구현하거나, [ProgressListener](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/event/ProgressListener.html)를 사용하여 비동기적으로 진행 상황 업데이트를 수신하면 전송 진행 상황을 확인할 수 있습니다.

GitHub의 [전체 예제](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/XferMgrProgress.java)를 참조하세요.

## 전송 상태 및 진행 상황 가져오기
<a name="transfermanager-get-status-and-progress"></a>

TransferManager `upload*`, `download*` 및 `copy` 메서드에 의해 반환되는 각각의 클래스는 단일 파일 작업인지 다중 파일 작업인지에 따라 다음 클래스 중 하나의 인스턴스를 반환합니다.


**​**  

| Class | 반환 메서드 | 
| --- | --- | 
|  [Copy](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/Copy.html)  |  `copy`  | 
|  [를 다운로드합니다](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/Download.html). |  `download`  | 
|  [MultipleFileDownload](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/MultipleFileDownload.html)  |  `downloadDirectory`  | 
|  [업로드](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/Upload.html)  |  `upload`  | 
|  [MultipleFileUpload](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/MultipleFileUpload.html)  |  `uploadFileList`, `uploadDirectory`  | 

이들 클래스는 모두 [Transfer](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/Transfer.html) 인터페이스를 구현합니다. `Transfer`는 전송 진행 상황을 가져오거나, 전송을 일시 중지 또는 재개하거나, 전송의 현재 또는 최종 상태를 가져올 수 있는 유용한 메서드를 제공합니다.

**Topics**
+ [현재 전송 진행 상황 폴링](#transfermanager-get-progress-polling)
+ [ProgressListener를 사용하여 전송 진행 상황 가져오기](#transfermanager-progress-listener)
+ [하위 전송 진행 상황 가져오기](#transfermanager-get-subtransfer-progress)

### 현재 전송 진행 상황 폴링
<a name="transfermanager-get-progress-polling"></a>

이 루프는 전송 진행 상황을 출력하며, 실행 중에 현재 진행 상황을 검사하고, 완료되었을 때 최종 상태를 출력합니다.

 **가져옵니다**.

```
import com.amazonaws.AmazonClientException;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.event.ProgressEvent;
import com.amazonaws.event.ProgressListener;
import com.amazonaws.services.s3.transfer.*;
import com.amazonaws.services.s3.transfer.Transfer.TransferState;

import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
```

 ** 코드** 

```
// print the transfer's human-readable description
System.out.println(xfer.getDescription());
// print an empty progress bar...
printProgressBar(0.0);
// update the progress bar while the xfer is ongoing.
do {
    try {
        Thread.sleep(100);
    } catch (InterruptedException e) {
        return;
    }
    // Note: so_far and total aren't used, they're just for
    // documentation purposes.
    TransferProgress progress = xfer.getProgress();
    long so_far = progress.getBytesTransferred();
    long total = progress.getTotalBytesToTransfer();
    double pct = progress.getPercentTransferred();
    eraseProgressBar();
    printProgressBar(pct);
} while (xfer.isDone() == false);
// print the final state of the transfer.
TransferState xfer_state = xfer.getState();
System.out.println(": " + xfer_state);
```

GitHub의 [전체 예제](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/XferMgrProgress.java)를 참조하세요.

### ProgressListener를 사용하여 전송 진행 상황 가져오기
<a name="transfermanager-progress-listener"></a>

[전송](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/Transfer.html) 인터페이스의 `addProgressListener` 메서드를 사용하여 [ProgressListener](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/event/ProgressListener.html)를 모든 전송에 연결할 수 있습니다.

[ProgressListener](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/event/ProgressListener.html)에는 `progressChanged`라는 메서드 하나만 필요하며, 이 메서드는 [ProgressEvent](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/event/ProgressEvent.html) 객체를 사용합니다. 이 객체를 사용하면 `getBytes` 메서드를 호출하여 총 작업 바이트 수와 `getBytesTransferred`를 호출하여 지금까지 전송된 바이트 수를 가져올 수 있습니다.

 **가져옵니다**.

```
import com.amazonaws.AmazonClientException;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.event.ProgressEvent;
import com.amazonaws.event.ProgressListener;
import com.amazonaws.services.s3.transfer.*;
import com.amazonaws.services.s3.transfer.Transfer.TransferState;

import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
```

 ** 코드** 

```
File f = new File(file_path);
TransferManager xfer_mgr = TransferManagerBuilder.standard().build();
try {
    Upload u = xfer_mgr.upload(bucket_name, key_name, f);
    // print an empty progress bar...
    printProgressBar(0.0);
    u.addProgressListener(new ProgressListener() {
        public void progressChanged(ProgressEvent e) {
            double pct = e.getBytesTransferred() * 100.0 / e.getBytes();
            eraseProgressBar();
            printProgressBar(pct);
        }
    });
    // block with Transfer.waitForCompletion()
    XferMgrProgress.waitForCompletion(u);
    // print the final state of the transfer.
    TransferState xfer_state = u.getState();
    System.out.println(": " + xfer_state);
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
xfer_mgr.shutdownNow();
```

GitHub의 [전체 예제](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/XferMgrProgress.java)를 참조하세요.

### 하위 전송 진행 상황 가져오기
<a name="transfermanager-get-subtransfer-progress"></a>

[MultipleFileUpload](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/MultipleFileUpload.html) 클래스는 `getSubTransfers` 메서드를 호출하여 하위 전송에 대한 정보를 반환할 수 있습니다. 각 하위 전송의 개별 전송 상태 및 진행 상황을 제공하는 수정 불가능한 [업로드](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/Upload.html) [컬렉션](https://docs.oracle.com/javase/8/docs/api/index.html?java/util/Collection.html) 객체를 반환합니다.

 **가져옵니다**.

```
import com.amazonaws.AmazonClientException;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.event.ProgressEvent;
import com.amazonaws.event.ProgressListener;
import com.amazonaws.services.s3.transfer.*;
import com.amazonaws.services.s3.transfer.Transfer.TransferState;

import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
```

 ** 코드** 

```
Collection<? extends Upload> sub_xfers = new ArrayList<Upload>();
sub_xfers = multi_upload.getSubTransfers();

do {
    System.out.println("\nSubtransfer progress:\n");
    for (Upload u : sub_xfers) {
        System.out.println("  " + u.getDescription());
        if (u.isDone()) {
            TransferState xfer_state = u.getState();
            System.out.println("  " + xfer_state);
        } else {
            TransferProgress progress = u.getProgress();
            double pct = progress.getPercentTransferred();
            printProgressBar(pct);
            System.out.println();
        }
    }

    // wait a bit before the next update.
    try {
        Thread.sleep(200);
    } catch (InterruptedException e) {
        return;
    }
} while (multi_upload.isDone() == false);
// print the final state of the transfer.
TransferState xfer_state = multi_upload.getState();
System.out.println("\nMultipleFileUpload " + xfer_state);
```

GitHub의 [전체 예제](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/XferMgrProgress.java)를 참조하세요.

## 추가 정보
<a name="transfermanager-see-also"></a>
+  Amazon Simple Storage Service 사용 설명서의 [객체 키](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html)