2014-02-28 2 views
0

Я огляделся и не встретил ничего особенного .NET, поэтому теперь я прошу помощи. Мне нужно загружать и шифровать (во время операции загрузки) объекты размером более 5 ГБ. У меня также будет необходимость скопировать эти объекты из папки в папку в ведре. Я могу загружать и копировать без проблем, проблема в том, что на стороне сервера шифрование объекта происходит не так, как ожидалось. В обоих случаях я пытаюсь использовать класс CopyPartRequest для выполнения шифрования. Мой код ниже. После этой операции объект есть и имеет правильный размер, просто не зашифрован. Есть что-то, что мне не хватает?Amazon S3 .NET SDK Шифрование объектов больше, чем 5 ГБ

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 _ 
} 
Смежные вопросы