2013-10-29 6 views
1

s3에있는 두 파일을 세 번째 파일로 병합하려는 응용 프로그램이 있습니다. 멀티 파트 업로드를 사용하여 복사 개체 사용을 생각했습니다. 아래는 코드입니다.S3에서 파일 병합

 AmazonS3Config config = new AmazonS3Config(); 
     AmazonS3 s3Client = new AmazonS3Client(accessKeyID, secretAccessKey, config); 

     // List to store upload part responses. 
     List<UploadPartResponse> uploadResponses = 
      new List<UploadPartResponse>(); 

     List<CopyPartResponse> copyResponses = 
        new List<CopyPartResponse>(); 
     InitiateMultipartUploadRequest initiateRequest = 
       new InitiateMultipartUploadRequest() 
       .WithBucketName(targetBucket) 
       .WithKey(targetObjectKey); 

     InitiateMultipartUploadResponse initResponse = 
      s3Client.InitiateMultipartUpload(initiateRequest); 
     String uploadId = initResponse.UploadId; 

     try 
     { 
      // Get object size. 
      GetObjectMetadataRequest metadataRequest = new GetObjectMetadataRequest(); 
      metadataRequest.BucketName = sourceBucket; 
      metadataRequest.Key = sourceObjectKey1; 

      GetObjectMetadataResponse metadataResponse = s3Client.GetObjectMetadata(metadataRequest); 
      long objectSize1 = metadataResponse.ContentLength; // in bytes 

      // Get object size. 
      GetObjectMetadataRequest metadataRequest2 = new GetObjectMetadataRequest(); 
      metadataRequest2.BucketName = sourceBucket; 
      metadataRequest2.Key = sourceObjectKey2; 

      GetObjectMetadataResponse metadataResponse2 = s3Client.GetObjectMetadata(metadataRequest2); 
      long objectSize2 = metadataResponse2.ContentLength; // in bytes 

      long bytePosition = 0; 


      CopyPartRequest copyRequest1 = new CopyPartRequest() 
       .WithDestinationBucket(targetBucket) 
       .WithDestinationKey(targetObjectKey) 
       .WithSourceBucket(sourceBucket) 
       .WithSourceKey(sourceObjectKey1) 
       .WithUploadID(uploadId) 
       .WithFirstByte(bytePosition) 
       .WithLastByte(objectSize1 - 1) 
       .WithPartNumber(1); 

      copyResponses.Add(s3Client.CopyPart(copyRequest1)); 


      CopyPartRequest copyRequest2 = new CopyPartRequest() 
       .WithDestinationBucket(targetBucket) 
       .WithDestinationKey(targetObjectKey) 
       .WithSourceBucket(sourceBucket) 
       .WithSourceKey(sourceObjectKey2) 
       .WithUploadID(uploadId) 
       .WithFirstByte(bytePosition) 
       .WithLastByte(objectSize2 - 1) 
       .WithPartNumber(2); 

      copyResponses.Add(s3Client.CopyPart(copyRequest2)); 

      //// 
      CompleteMultipartUploadRequest completeRequest = 
        new CompleteMultipartUploadRequest() 
        .WithBucketName(targetBucket) 
        .WithKey(targetObjectKey) 
        .WithUploadId(initResponse.UploadId) 
        .WithPartETags(GetETags(copyResponses)); 

      CompleteMultipartUploadResponse completeUploadResponse = 
       s3Client.CompleteMultipartUpload(completeRequest); 

     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e.Message); 
     } 

그러나 마지막 행의 CompleteMultipartUpload에서 예외가 발생합니다. 다음은 S3 예외입니다. 제안 된 업로드가 허용 된 최소 크기보다 작습니다.

마치 copyRequest1 만 업로드해도 문제가 없습니다.

도움을 주시면 감사하겠습니다.

안부, Haseena는

+0

수행 할 수 있지만 병합 된 파일의 크기는 최소 5MB 이상이어야합니다. http://stackoverflow.com/questions/19634555/multipart-upload-error-in-c-sharp –

답변

0

당신은 문제를 해결하기 위해 관리나요? 그것은 S3 API를 사용하여 수행 할 수없는 것 같습니다

+0

예, s3 api를 사용하여 수행 할 수 없으므로 FTP를 사용하여 다운로드하고 병합합니다. –

0

S3 API를 사용하여 업로드 된 파일을 병합 할 수 없으므로 FTP를 사용하여 다운로드 및 병합합니다.

관련 문제