首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Amazon S3 .NET SDK加密大于5 5GB的对象

Amazon S3 .NET SDK加密大于5 5GB的对象
EN

Stack Overflow用户
提问于 2014-03-01 04:20:41
回答 1查看 187关注 0票数 0

我环顾四周,没有遇到任何特定于.NET的东西,所以现在我在这里寻求帮助。我需要上传和加密(在上传操作期间)大于5 5GB的对象。我还需要将这些对象从一个存储桶中的文件夹复制到另一个文件夹。我可以上传和复制没有问题,问题是服务器端加密的对象没有按预期发生。在这两种情况下,我都尝试使用CopyPartRequest类来执行加密。我的代码如下。在此操作之后,对象就在那里并且大小合适,只是没有加密。我是不是漏掉了什么?

代码语言:javascript
复制
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

根据我所读到的,在复制部分请求中指定加密应该可以做到这一点,但它不适合我。

上面的代码是vb.net,但我既可以使用VB也可以使用C#。如果需要更多信息,请让我知道。

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2014-03-05 02:18:18

如果有人遇到这种情况,问题出在启动分块上传请求时……我必须在那里指定AES256加密,所以

代码语言:javascript
复制
Dim initiateRequest As New InitiateMultipartUploadRequest() With { _
    .BucketName = bucketName, _
    .Key = destObject _
}

变成了

代码语言:javascript
复制
Dim initiateRequest As New InitiateMultipartUploadRequest() With { _
    .BucketName = bucketName, _
    .ServerSideEncryptionMethod = Amazon.S3.ServerSideEncryptionMethod.AES256, _  
    .Key = destObject _
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22105053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档