메뉴
Amazon Simple Storage Service
개발자 안내서 (API Version 2006-03-01)

파일 업로드

다음 작업은 하위 수준 .NET 클래스를 사용하여 파일을 업로드하는 방법을 보여 줍니다.

하위 수준 API 파일 업로드 프로세스

1

AWS 자격 증명을 제공하여 AmazonS3Client 클래스의 인스턴스를 만듭니다.

2

AmazonS3Client.InitiateMultipartUpload 메서드를 실행하여 멀티파트 업로드를 시작합니다. InitiateMultipartUploadRequest 클래스의 인스턴스를 만들어 멀티파트 업로드를 시작하려면 필수 정보를 제공해야 합니다.

3

AmazonS3Client.InitiateMultipartUpload 메서드가 반환하는 업로드 ID를 저장합니다. 이후의 멀티파트 업로드 작업에서 이 업로드 ID를 제공해야 합니다.

4

부분을 업로드합니다. 각 파트 업로드에 대해 AmazonS3Client.UploadPart 메서드를 실행합니다. 업로드 ID, 버킷 이름, 부분 번호 등 파트 업로드 정보를 제공해야 합니다. UploadPartRequest 클래스의 인스턴스를 만들어 이 정보를 제공합니다.

5

AmazonS3Client.UploadPart 메서드의 응답을 목록에 저장합니다. 이 응답은 향후 멀티파트 업로드를 완료하기 위해 필요한 ETag 값과 부분 번호를 포함합니다.

6

각 파트에 대해 4-5 작업을 반복합니다.

7

AmazonS3Client.CompleteMultipartUpload 메서드를 실행하여 멀티파트 업로드를 완료합니다.

다음은 위에서 설명한 작업을 실행하는 C# 코드 예제입니다.

Copy
IAmazonS3 s3Client = new AmazonS3Client(Amazon.RegionEndpoint.USEast1); // List to store upload part responses. List<UploadPartResponse> uploadResponses = new List<UploadPartResponse>(); // 1. Initialize. InitiateMultipartUploadRequest initiateRequest = new InitiateMultipartUploadRequest { BucketName = existingBucketName, Key = keyName }; InitiateMultipartUploadResponse initResponse = s3Client.InitiateMultipartUpload(initRequest); // 2. Upload Parts. long contentLength = new FileInfo(filePath).Length; long partSize = 5242880; // 5 MB try { long filePosition = 0; for (int i = 1; filePosition < contentLength; i++) { // Create request to upload a part. UploadPartRequest uploadRequest = new UploadPartRequest { BucketName = existingBucketName, Key = keyName, UploadId = initResponse.UploadId, PartNumber = i, PartSize = partSize, FilePosition = filePosition, FilePath = filePath }; // Upload part and add response to our list. uploadResponses.Add(s3Client.UploadPart(uploadRequest)); filePosition += partSize; } // Step 3: complete. CompleteMultipartUploadRequest completeRequest = new CompleteMultipartUploadRequest { BucketName = existingBucketName, Key = keyName, UploadId = initResponse.UploadId, }; CompleteMultipartUploadResponse completeUploadResponse = s3Client.CompleteMultipartUpload(completeRequest); } catch (Exception exception) { Console.WriteLine("Exception occurred: {0}", exception.Message); AbortMultipartUploadRequest abortMPURequest = new AbortMultipartUploadRequest { BucketName = existingBucketName, Key = keyName, UploadId = initResponse.UploadId }; s3Client.AbortMultipartUpload(abortMPURequest); }

참고

.NET API를 사용하여 대형 객체 업로드 시 데이터가 요청 스트림에 작성되는 중이더라도 제한 시간이 발생할 수 있습니다. UploadPartRequest를 사용하여 제한 시간을 명시적으로 설정할 수 있습니다.

다음 C# 코드 예제는 Amazon S3 버킷에 파일을 업로드합니다. 실제 예제를 작성하여 테스트하는 방법에 대한 자세한 내용은 Amazon S3 .NET 코드 예시 실행를 참조하십시오.

Copy
using System; using System.Collections.Generic; using System.IO; using Amazon.S3; using Amazon.S3.Model; namespace s3.amazon.com.docsamples { class UploadFileMPULowLevelAPI { static string existingBucketName = "*** bucket name ***"; static string keyName = "*** key name ***"; static string filePath = "*** file path ***"; static void Main(string[] args) { IAmazonS3 s3Client = new AmazonS3Client(Amazon.RegionEndpoint.USEast1); // List to store upload part responses. List<UploadPartResponse> uploadResponses = new List<UploadPartResponse>(); // 1. Initialize. InitiateMultipartUploadRequest initiateRequest = new InitiateMultipartUploadRequest { BucketName = existingBucketName, Key = keyName }; InitiateMultipartUploadResponse initResponse = s3Client.InitiateMultipartUpload(initiateRequest); // 2. Upload Parts. long contentLength = new FileInfo(filePath).Length; long partSize = 5 * (long)Math.Pow(2, 20); // 5 MB try { long filePosition = 0; for (int i = 1; filePosition < contentLength; i++) { UploadPartRequest uploadRequest = new UploadPartRequest { BucketName = existingBucketName, Key = keyName, UploadId = initResponse.UploadId, PartNumber = i, PartSize = partSize, FilePosition = filePosition, FilePath = filePath }; // Upload part and add response to our list. uploadResponses.Add(s3Client.UploadPart(uploadRequest)); filePosition += partSize; } // Step 3: complete. CompleteMultipartUploadRequest completeRequest = new CompleteMultipartUploadRequest { BucketName = existingBucketName, Key = keyName, UploadId = initResponse.UploadId, //PartETags = new List<PartETag>(uploadResponses) }; completeRequest.AddPartETags(uploadResponses); CompleteMultipartUploadResponse completeUploadResponse = s3Client.CompleteMultipartUpload(completeRequest); } catch (Exception exception) { Console.WriteLine("Exception occurred: {0}", exception.Message); AbortMultipartUploadRequest abortMPURequest = new AbortMultipartUploadRequest { BucketName = existingBucketName, Key = keyName, UploadId = initResponse.UploadId }; s3Client.AbortMultipartUpload(abortMPURequest); } } } }