开发者社区> 问答> 正文

【OSS  .net大文件上传代码】

        public static void mutiPartUpload()
        {
  
            OssClient ossClient = new OssClient(endPoint, accessKeyID, accessKeySecret);
  
            InitiateMultipartUploadRequest initRequest =  
                            new InitiateMultipartUploadRequest(bucketName, key);
            InitiateMultipartUploadResult initResult = ossClient.InitiateMultipartUpload(initRequest);
  
  
            // 设置每块为 5M
            int partSize = 1024 * 1024 * 5;
  
            FileInfo partFile = new FileInfo("D:/Big.zip");
  
            // 计算分块数目
            int partCount = (int)(partFile.Length / partSize);
            if (partFile.Length % partSize != 0)
            {
                partCount++;
            }
  
            // 新建一个List保存每个分块上传后的ETag和PartNumber
            List<PartETag> partETags = new List<PartETag>();
  
            for (int i = 0; i < partCount; i++)
            {
                // 获取文件流
                FileStream fis = new FileStream(partFile.FullName, FileMode.Open);
  
                // 跳到每个分块的开头
                long skipBytes = partSize * i;
                fis.Position = skipBytes;
                //fis.skip(skipBytes);
  
                // 计算每个分块的大小
                long size = partSize < partFile.Length - skipBytes ?
                        partSize : partFile.Length - skipBytes;
  
                // 创建UploadPartRequest,上传分块
                UploadPartRequest uploadPartRequest = new UploadPartRequest(bucketName, "upload_file.pdf", initResult.UploadId);
                uploadPartRequest.InputStream = fis;
                uploadPartRequest.PartSize = size;
                uploadPartRequest.PartNumber = (i + 1);
                UploadPartResult uploadPartResult = ossClient.UploadPart(uploadPartRequest);
  
                // 将返回的PartETag保存到List中。
                partETags.Add(uploadPartResult.PartETag);
  
                // 关闭文件
                fis.Close();
            }
  
             CompleteMultipartUploadRequest completeReq = new CompleteMultipartUploadRequest(bucketName, key, initResult.UploadId);
            foreach (PartETag partETag in partETags)
            {
                completeReq.PartETags.Add(partETag);
            }
            //  红色标注的是与JAVA的SDK有区别的地方


            //完成分块上传
            CompleteMultipartUploadResult completeResult = ossClient.CompleteMultipartUpload(completeReq);
            // 返回最终文件的MD5,用于用户进行校验
            Console.WriteLine(completeResult.ETag);
  
        }

展开
收起
千鸟 2014-07-24 10:00:09 11778 0
3 条回答
写回答
取消 提交回答
  • 每一块5M,是不是太大了?
    2014-10-02 07:19:42
    赞同 展开评论 打赏
  • LT是个伪程序员
    回 1楼(暗夜的怒吼) 的帖子
    我要没记错应该是上传到bucket中的对象名,也就是上传后服务器存储的文件名

    -------------------------

    回 3楼(眼缭乱花) 的帖子
    其实我在测试的时候用的是1M,哈哈,被你发现了。
    2014-09-11 00:34:21
    赞同 展开评论 打赏
  • Re【OSSnet大文件上传代码】
    请教 UploadPartRequest的参数key是啥啊?
    2014-09-09 14:43:53
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
OSS运维进阶实战手册 立即下载
《OSS运维基础实战手册》 立即下载
OSS运维基础实战手册 立即下载