zoukankan      html  css  js  c++  java
  • 阿里云OSS分片上传DEMO

    分片传输规则

    1.不能超过10000片,
    2.每片必须大于100KB

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using Aliyun.OSS;
    
    namespace OssDemo
    {
        public partial class Form1 : Form
        {
            private string _endpoint = "oss-cn-beijing.aliyuncs.com";
            // accessKey请登录https://ak-console.aliyun.com/#/查看
            private string _accessKeyId = "";
            private string _accessKeySecret = "";
            private int partSize = 2*1024*1024;
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                lblStatus.Text = "Ready";
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    var fileToUpload = openFileDialog1.FileName;
                    var filename = Path.GetFileName(fileToUpload);
                    var client = new OssClient(_endpoint, _accessKeyId, _accessKeySecret);
                    try
                    {
                        string bucketName = "myoss";
                        string key = filename;
    
                        // 开始Multipart Upload
                        var request = new InitiateMultipartUploadRequest(bucketName, key);
                        var result = client.InitiateMultipartUpload(request);
    
                        // 计算片个数
                        var fi = new FileInfo(fileToUpload);
                        var fileSize = fi.Length;
                        var partCount = fileSize / partSize;
                        if (fileSize % partSize != 0)
                        {
                            partCount++;
                        }
    
                        // 开始分片上传
                        try
                        {
                            var partETags = new List<PartETag>();
                            using (var fs = File.Open(fileToUpload, FileMode.Open))
                            {
                                for (var i = 0; i < partCount; i++)
                                {
                                    var skipBytes = (long)partSize * i;
    
                                    //定位到本次上传片应该开始的位置
                                    fs.Seek(skipBytes, 0);
    
                                    //计算本次上传的片大小,最后一片为剩余的数据大小,其余片都是part size大小。
                                    var size = (partSize < fileSize - skipBytes) ? partSize : (fileSize - skipBytes);
                                    var req = new UploadPartRequest(bucketName, filename, result.UploadId)
                                    {
                                        InputStream = fs,
                                        PartSize = size,
                                        PartNumber = i + 1
                                    };
    
                                    //调用UploadPart接口执行上传功能,返回结果中包含了这个数据片的ETag值
                                    var ret = client.UploadPart(req);
                                    partETags.Add(ret.PartETag);
                                }
                                Console.WriteLine("Put multi part upload succeeded : {0}", result.UploadId);
                                try
                                {
                                    var completeMultipartUploadRequest = new CompleteMultipartUploadRequest(bucketName, key, result.UploadId);
                                    foreach (var partETag in partETags)
                                    {
                                        completeMultipartUploadRequest.PartETags.Add(partETag);
                                    }
                                    var ret2 = client.CompleteMultipartUpload(completeMultipartUploadRequest);
                                    Console.WriteLine("complete multi part succeeded");
                                }
                                catch (Exception ex)
                                {
                                    Console.WriteLine("complete multi part failed, {0}", ex.Message);
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("Put multi part upload failed, {0}", ex.Message);
                        }
    
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Init multi part upload failed, {0}", ex.Message);
                    }
                }
            }
        }
    }
  • 相关阅读:
    【windows 10 安装docker for windows】
    【windows本地修改git账号、路径信息】
    【echarts】简单使用流程(java)
    【MySql】explain
    【thymeleaf-标签】th:with
    【MongoDB】Windows:安装与启动
    【thymeleaf-标签】th:if
    Thread类中interrupt()、interrupted()和isInterrupted()方法详解
    java中的锁
    LinkedList集合详解
  • 原文地址:https://www.cnblogs.com/blackice/p/5584388.html
Copyright © 2011-2022 走看看