最近不是很忙,就看了下阿里云儲存,整理出來方法,為以后改版微笑話網內容多的時候用云儲存準備,現在貼出來,希望對大家有所幫助,本文有博客園 三卷天書原創,轉載請注明出處,謝謝!
直接貼代碼了,就一個幫助類,直接調用里面的方法就OK了的,如果有什么地方出錯,麻煩各位在回復區指出。
/// <summary> /// 阿里云儲存幫助類(歡迎訪問www.weixh.net微笑話,幫我漲點人氣謝謝大家了) /// </summary> public class AliyunHelper { 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 (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 (Exception ex) { return ex.Message; } } /// <summary> /// 分片上傳 /// </summary> /// <param name="bucketName">空間名</param> /// <param name="key">唯一標識</param> /// <param name="file">上傳控件</param> /// <param name="partSize">每片大?。J5MB)</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 (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 (Exception ex) { return ex.Message; } } #endregion }
轉載請注明出處。
新聞熱點
疑難解答