2014-02-28 38 views
0

我環顧四周,沒有遇到任何.NET特定的問題,所以現在我在這裏尋求幫助。我需要上傳和加密(在上傳操作期間)大於5GB的對象。我還需要將這些對象從文件夾複製到存儲桶中的文件夾。我可以上傳和複製沒有問題,問題是對象的服務器端加密不按預期發生。在這兩種情況下,我試圖使用CopyPartRequest類來執行加密。我的代碼如下。在此操作之後,對象在那裏並且尺寸合適,只是未加密。有什麼我失蹤?亞馬遜S3 .NET SDK加密大於5GB的對象

Dim s3Client As IAmazonS3 
s3Client = New AmazonS3Client(accessKey, secretAccessKeyID, Amazon.RegionEndpoint.USEast1) 

Dim uploadResponses As New List(Of UploadPartResponse)() 
Dim copyResponses As New List(Of CopyPartResponse)() 

Dim initiateRequest As New InitiateMultipartUploadRequest() With { _ 
    .BucketName = bucketName, _ 
    .Key = destObject _ 
} 

Dim initResponse As InitiateMultipartUploadResponse = s3Client.InitiateMultipartUpload(initiateRequest) 

Dim uploadId As [String] = initResponse.UploadId 

Dim metadataRequest As New GetObjectMetadataRequest() With { _ 
    .BucketName = bucketName, _ 
    .Key = objToCopy _ 
} 

Dim metadataResponse As GetObjectMetadataResponse = s3Client.GetObjectMetadata(metadataRequest) 
Dim objectSize As Long = metadataResponse.ContentLength 
Dim partSize As Long = 5 * CLng(Math.Pow(2, 20)) 

Dim bytePosition As Long = 0 
Dim i As Integer = 1 

While bytePosition < objectSize 
    Dim copyRequest As New CopyPartRequest() With { _ 
     .DestinationBucket = bucketName, _ 
     .DestinationKey = destObject, _ 
     .SourceBucket = bucketName, _ 
     .SourceKey = objToCopy, _ 
     .UploadId = uploadId, _ 
     .FirstByte = bytePosition, _ 
     .LastByte = If(bytePosition + partSize - 1 >= objectSize, objectSize - 1, bytePosition + partSize - 1), _ 
     .ServerSideEncryptionMethod = Amazon.S3.ServerSideEncryptionMethod.AES256, _ 
     .PartNumber = i _ 
    } 

    copyResponses.Add(s3Client.CopyPart(copyRequest)) 

    bytePosition += partSize 

    If (bytePosition * 100)/objectSize >= 99 Then 
     bgCopyMoveFile.ReportProgress(99) 
    Else 
     bgCopyMoveFile.ReportProgress((bytePosition * 100)/objectSize) 
    End If 

    i += 1 
End While 

通過我讀過的,在copypartrequest中指定加密應該這樣做,但它不適合我。

上面的代碼是vb.net,但我可以做VB或C#。如果需要更多信息,請告訴我。

在此先感謝!

回答

0

在任何人的情況下運行到這一點,問題是在發起多載請求......我必須有指定AES256加密,所以

Dim initiateRequest As New InitiateMultipartUploadRequest() With { _ 
    .BucketName = bucketName, _ 
    .Key = destObject _ 
} 

變成

Dim initiateRequest As New InitiateMultipartUploadRequest() With { _ 
    .BucketName = bucketName, _ 
    .ServerSideEncryptionMethod = Amazon.S3.ServerSideEncryptionMethod.AES256, _ 
    .Key = destObject _ 
}