AWS SDK를 사용하여 멀티파트 업로드 추적
수신 대기 인터페이스를 사용하여 Amazon S3에 대한 객체 업로드 진행 상황을 추적할 수 있습니다. 고급 멀티파트 업로드 API는 ProgressListener
라는 수신 대기 인터페이스를 제공합니다. 진행률 이벤트는 주기적으로 발생하며 바이트가 전송되었음을 리스너에게 통보합니다. 멀티파트 업로드에 대한 일반적인 내용을 자세히 알아보려면 Amazon S3에서 멀티파트 업로드를 사용한 객체 업로드 및 복사 섹션을 참조하세요.
추가 체크섬이 포함된 멀티파트 업로드를 사용하여 객체를 업로드하는 전체 절차는 튜토리얼: 멀티파트 업로드를 통한 객체 업로드 및 데이터 무결성 확인 섹션을 참조하세요.
다음 섹션에서는 AWS SDK와 함께 멀티파트 업로드를 추적하는 방법을 보여줍니다.
- Java
-
예
다음 Java 코드는 파일을 업로드하고
ExecutionInterceptor
을(를) 사용하여 업로드 진행률을 추적합니다. 작동하는 샘플을 만들어 테스트하는 방법에 대한 지침은 AWS SDK for Java 2.x 개발자 안내서의 Getting Started를 참조하세요.import java.nio.file.Paths; import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider; import software.amazon.awssdk.core.async.AsyncRequestBody; import software.amazon.awssdk.core.interceptor.Context; import software.amazon.awssdk.core.interceptor.ExecutionAttributes; import software.amazon.awssdk.core.interceptor.ExecutionInterceptor; import software.amazon.awssdk.services.s3.S3AsyncClient; import software.amazon.awssdk.services.s3.model.PutObjectRequest; public class TrackMPUProgressUsingHighLevelAPI { static class ProgressListener implements ExecutionInterceptor { private long transferredBytes = 0; @Override public void beforeTransmission(Context.BeforeTransmission context, ExecutionAttributes executionAttributes) { if (context.httpRequest().firstMatchingHeader("Content-Length").isPresent()) { String contentLength = context.httpRequest().firstMatchingHeader("Content-Length").get(); long partSize = Long.parseLong(contentLength); transferredBytes += partSize; System.out.println("Transferred bytes: " + transferredBytes); } } } public static void main(String[] args) throws Exception { String existingBucketName = "*** Provide bucket name ***"; String keyName = "*** Provide object key ***"; String filePath = "*** file to upload ***"; S3AsyncClient s3Client = S3AsyncClient.builder() .credentialsProvider(ProfileCredentialsProvider.create()) .overrideConfiguration(c -> c.addExecutionInterceptor(new ProgressListener())) .build(); // For more advanced uploads, you can create a request object // and supply additional request parameters (ex: progress listeners, // canned ACLs, etc.) PutObjectRequest request = PutObjectRequest.builder() .bucket(existingBucketName) .key(keyName) .build(); AsyncRequestBody requestBody = AsyncRequestBody.fromFile(Paths.get(filePath)); // You can ask the upload for its progress, or you can // add a ProgressListener to your request to receive notifications // when bytes are transferred. // S3AsyncClient processes all transfers asynchronously, // so this call will return immediately. var upload = s3Client.putObject(request, requestBody); try { // You can block and wait for the upload to finish upload.join(); } catch (Exception exception) { System.out.println("Unable to upload file, upload aborted."); exception.printStackTrace(); } finally { s3Client.close(); } } }
- .NET
다음 C# 예제는
TransferUtility
클래스를 사용하여 S3 버킷에 파일을 업로드하고 업로드 진행률을 추적합니다. 코드 예제 설정 및 실행에 대한 자세한 내용은 AWS SDK for .NET 개발자 안내서의 AWS SDK for .NET 시작하기를 참조하세요.using Amazon; using Amazon.S3; using Amazon.S3.Transfer; using System; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class TrackMPUUsingHighLevelAPITest { private const string bucketName = "*** provide the bucket name ***"; private const string keyName = "*** provide the name for the uploaded object ***"; private const string filePath = " *** provide the full path name of the file to upload **"; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 s3Client; public static void Main() { s3Client = new AmazonS3Client(bucketRegion); TrackMPUAsync().Wait(); } private static async Task TrackMPUAsync() { try { var fileTransferUtility = new TransferUtility(s3Client); // Use TransferUtilityUploadRequest to configure options. // In this example we subscribe to an event. var uploadRequest = new TransferUtilityUploadRequest { BucketName = bucketName, FilePath = filePath, Key = keyName }; uploadRequest.UploadProgressEvent += new EventHandler<UploadProgressArgs> (uploadRequest_UploadPartProgressEvent); await fileTransferUtility.UploadAsync(uploadRequest); Console.WriteLine("Upload completed"); } catch (AmazonS3Exception e) { Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message); } catch (Exception e) { Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message); } } static void uploadRequest_UploadPartProgressEvent(object sender, UploadProgressArgs e) { // Process event. Console.WriteLine("{0}/{1}", e.TransferredBytes, e.TotalBytes); } } }
멀티파트 업로드 나열
멀티파트 업로드 중단