分片傳輸規則
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);
}
}
}
}
}
轉載于:https://www.cnblogs.com/blackice/p/5584388.html