c#分段上传文件到亚马逊S3

亚马逊的限制

亚马逊分段传输,要求每个小段的大小不能小于5M

代码实操

//提供awsAccessKeyId和awsSecretAccessKey构造凭证
     var credentials = new BasicAWSCredentials("accesskey", "secretKey");


     //提供awsEndPoint(域名)进行访问配置
     var clientConfig = new AmazonS3Config
     {
         ServiceURL = "https://s3.ap-east-1.amazonaws.com",
         ForcePathStyle = true
     };
     var client = new AmazonS3Client(credentials, clientConfig);
     var data = File.ReadAllBytes("d:\\aa.zip");
	 var key = "test/a.zip";
     var initRet = await client.InitiateMultipartUploadAsync("yourBucketName", key);

     List<PartETag> partETags = new List<PartETag>();
     var partNum = 1;
     for (var i = 0; i < data.Length;)
     {

         UploadPartRequest partRequest = new UploadPartRequest();
         partRequest.BucketName = "yourBucketName";
         partRequest.UploadId = initRet.UploadId;
         partRequest.Key = key;
         partRequest.PartNumber = partNum++;


         partRequest.FilePosition = i;
         //亚马逊限制每段最小5M
         partRequest.InputStream = new MemoryStream(data, i, Math.Min(data.Length - i, 1024 * 1024 * 5));
         partRequest.IsLastPart = (data.Length - i) < 1024 * 1024 * 5;
         i += (int)partRequest.InputStream.Length;
         var ret = await client.UploadPartAsync(partRequest);
         partETags.Add(new PartETag(ret));
     }


     var retCompleted = await client.CompleteMultipartUploadAsync(new CompleteMultipartUploadRequest
     {
         UploadId = initRet.UploadId,
         BucketName = "yourBucketName",
         Key = key,
         PartETags = partETags,
     });

     //设置文件访问权限
     await client.PutACLAsync(new PutACLRequest
     {
         CannedACL = S3CannedACL.PublicRead,
         BucketName = retCompleted.BucketName,
         Key = retCompleted.Key,
     });

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值