using Aliyun.OSS;
using Aliyun.OSS.Common;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Web.UI.WebControls;
namespace QuickEAS.CoreLib.Aliyun
{
/// <summary>阿里雲儲存幫助類</summary>
public class LibAliyunHelper
{
const string accessKeyId = "<your access key id>";
const string accessKeySecret = "<your access key secret>";
const string endpoint = "<valid host name>";
#region 上傳部分
/// <summary>
/// 簡單上傳文件
/// </summary>
/// <param name="file">上傳控件</param>
/// <param name="key">文件標識</param>
/// <param name="bucketName">空間名</param>
public static string AliyunUploadFile(FileUpload file, string key, string bucketName)
{
try
{
Stream sr = file.PostedFile.InputStream;
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
var result = client.PutObject(bucketName, key, sr);
return "succeeded";
}
catch (OssException ex)
{
return "上傳失敗:" + ex.ErrorCode;
}
catch (System.Exception ex)
{
return ex.Message;
}
}
/// <summary>
/// 簡單上傳文件
/// </summary>
/// <param name="file">上傳控件</param>
/// <param name="key">文件標識</param>
/// <param name="bucketName">空間名</param>
public static string AliyunUploadFile(HttpPostedFile file, string key, string bucketName)
{
try
{
Stream sr = file.InputStream;
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
var result = client.PutObject(bucketName, key, sr);
return "succeeded";
}
catch (OssException ex)
{
return "上傳失敗:" + ex.ErrorCode;
}
catch (System.Exception ex)
{
return ex.Message;
}
}
/// <summary>
/// 分片上傳
/// </summary>
/// <param name="bucketName">空間名</param>
/// <param name="key">唯一標識</param>
/// <param name="file">上傳控件</param>
/// <param name="partSize">每片大小(默認5MB)</param>
/// <returns></returns>
public static string AliyunUploadPart(string bucketName, string key, FileUpload file, int partSize = 5 * 1024 * 1024)
{
try
{
Stream sr = file.PostedFile.InputStream;
OssClient client = new OssClient(endpoint, accessKeyId, accessKeySecret);
client.PutBigObject(bucketName, key, sr, null, partSize);
return "succeeded";
}
catch (OssException ex)
{
return "上傳失敗:" + ex.ErrorCode;
}
catch (System.Exception ex)
{
return "上傳失敗:" + ex.Message;
}
}
/// <summary>
/// 分片上傳
/// </summary>
/// <param name="bucketName">空間名</param>
/// <param name="objectName">key</param>
/// <param name="fileToUpload">指定分片上傳文件路徑</param>
/// <param name="partSize">分片大小(單位:字節)</param>
public static void UploadMultipart(String bucketName, String key, FileUpload file, int partSize = 5 * 1024 * 1024)
{
var uploadId = InitiateMultipartUpload(bucketName, key);
var partETags = UploadParts(bucketName, key, file, uploadId, partSize);
var completeResult = CompleteUploadPart(bucketName, key, uploadId, partETags);
//Console.WriteLine(@"Upload multipart result : " + completeResult.Location);
}
private static string InitiateMultipartUpload(String bucketName, String objectName)
{
var request = new InitiateMultipartUploadRequest(bucketName, objectName);
OssClient client = new OssClient(endpoint, accessKeyId, accessKeySecret);
var result = client.InitiateMultipartUpload(request);
return result.UploadId;
}
private static List<PartETag> UploadParts(String bucketName, String objectName, FileUpload file, String uploadId, int partSize)
{
var fileSize = file.PostedFile.ContentLength;
var partCount = fileSize / partSize;
if (fileSize % partSize != 0)
{
partCount++;
}
var partETags = new List<PartETag>();
using (var sr = file.PostedFile.InputStream)
{
for (var i = 0; i < partCount; i++)
{
var skipBytes = (long)partSize * i;
sr.Seek(skipBytes, 0);
var size = (partSize < fileSize - skipBytes) ? partSize : (fileSize - skipBytes);
var request = new UploadPartRequest(bucketName, objectName, uploadId)
{
InputStream = sr,
PartSize = size,
PartNumber = i + 1
};
OssClient client = new OssClient(endpoint, accessKeyId, accessKeySecret);
var result = client.UploadPart(request);
partETags.Add(result.PartETag);
}
}
return partETags;
}
private static CompleteMultipartUploadResult CompleteUploadPart(String bucketName, String objectName, String uploadId, List<PartETag> partETags)
{
var completeMultipartUploadRequest =
new CompleteMultipartUploadRequest(bucketName, objectName, uploadId);
foreach (var partETag in partETags)
{
completeMultipartUploadRequest.PartETags.Add(partETag);
}
OssClient client = new OssClient(endpoint, accessKeyId, accessKeySecret);
return client.CompleteMultipartUpload(completeMultipartUploadRequest);
}
#endregion
#region URL訪問
/// <summary>
/// URL獲取
/// </summary>
/// <param name="bucketName"></param>
/// <param name="key"></param>
/// <returns></returns>
public static string GetUrlGet(string bucketName, string key)
{
var req = new GeneratePresignedUriRequest(bucketName, key, SignHttpMethod.Get)
{
Expiration = new DateTime().AddHours(1)
};
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
var uri = client.GeneratePresignedUri(req);
return uri.ToString();
}
/// <summary>
/// URL獲取
/// </summary>
/// <param name="bucketName"></param>
/// <param name="key"></param>
/// <param name="timeMinutes">過期時間(分)</param>
/// <returns></returns>
public static string GetUrlGet(string bucketName, string key, int timeMinutes)
{
var req = new GeneratePresignedUriRequest(bucketName, key, SignHttpMethod.Get)
{
Expiration = new DateTime().AddMinutes(timeMinutes)
};
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
var uri = client.GeneratePresignedUri(req);
return uri.ToString();
}
#endregion
#region 文件下載
/// <summary>
/// 從指定的OSS存儲空間中獲取指定的文件
/// </summary>
/// <param name="bucketName">要獲取的文件所在的存儲空間的名稱</param>
/// <param name="key">要獲取的文件的名稱</param>
/// <param name="fileToDownload">文件保存的本地路徑</param>
public static string GetObject(string bucketName, string key, string fileToDownload)
{
try
{
// 初始化OssClient
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
var obj = client.GetObject(bucketName, key);
using (var requestStream = obj.Content)
{
byte[] buf = new byte[1024];
var fs = File.Open(fileToDownload, FileMode.OpenOrCreate);
var len = 0;
while ((len = requestStream.Read(buf, 0, 1024)) != 0)
{
fs.Write(buf, 0, len);
}
fs.Close();
}
return "succeeded";
}
catch (System.Exception ex)
{
return ex.Message;
}
}
#endregion
}
}
【代碼片段】阿里雲儲存幫助類
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.