天天看點

對OSS的操作

   進入正題前先說一下我遇到的問題:

            ①:   這是因為本地時間與伺服器時差太大的原因  --你可檢查一下你的本地時區,(阿裡的程式猿竟突讓我換個接口試試!)

            ②:  我在從OSS上擷取圖檔時因為endpoint缺少一個參數而産生的,

                     誤:http://oss-cn-beijing.aliyuncs.com/developer/2/2.jpg

                     正:http://oss-cn-beijing.aliyuncs.com/gevek/developer/2/2.jpg

※ ※ ※ ※ ※ ※  coding前首先介紹一下OSS三個基本要素/ bucket  AccessKey   AccessID  Services

  1、Bucket :

    Bucket是OSS上的命名空間,也是計費、權限控制、日志記錄等進階功能的管理實體;Bucket名稱在整個OSS服務中具有全局唯一性,且不能修改;存儲在OSS上的每個Object必須都包含在某個Bucket中。一個應用,例如圖檔分享網站,可以對應一個或多個Bucket。一個使用者最多可建立10個Bucket,但每個Bucket中存放的Object的數量和大小總和沒有限制,使用者不需要考慮資料的可擴充性。

 2、AccessKey   AccessID :

    使用者注冊OSS時,系統會給使用者配置設定一對Access Key ID和Access Key Secret,稱為ID對,用于辨別使用者,為通路OSS做簽名驗證。

3、service

    OSS提供給使用者的虛拟存儲空間,在這個虛拟空間中,每個使用者可擁有一個到多個Bucket。

       在此 給需要的童鞋提供一下 SDK下載下傳連結  http://pan.baidu.com/s/1kTm3sDx;

      下面進入正題:具體展示三個基本要素的基本使用。

一、單檔案上傳

        const string _accessId = "your access ID";

        const string _accessKey = " your access Key";

        const string _endpoint = "http://oss-cn-(伺服器位置).aliyuncs.com";

        private static readonly OssClient _ossClient = new OssClient(_endpoint, _accessId, _accessKey);

     public bool PutSingleObject(String bucketName, String objectName, String fileToUpload)

         {

             bool resul = false;

            try

             {

                 OssClient client = new OssClient(_endpoint, _accessId, _accessKey);

                 using (var fs = File.Open(fileToUpload, FileMode.Open))

                 {

                     var metadata = new ObjectMetadata();

                     metadata.UserMetadata.Add("mykey1", "myval1");                

                      metadata.CacheControl = "No-Cache";

                     metadata.ContentLength = fs.Length;

                     client.PutObject(bucketName, objectName, fs, metadata);

                    MessageBox.Show(client.ToString());

                 }

                 resul=true;

             }

             catch (OssException )

             {

                 MessageBox.Show("請檢查網絡");

                 resul = false;

                 Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",

                 //    ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);

             }

             catch (Exception )

             {

                 MessageBox.Show("請檢查網絡");

                 resul = false;

                 // Console.WriteLine("Failed with error info: {0}", ex.Message);

             }

            return resul;

         }

  二 、多檔案上傳 (帶進度條) UploadMultipart

     public class UploadThread

     {    

         public delegate void ShowProgressDelegate(int totalStep, int currentStep);

         private ShowProgressDelegate process_;

         private Control invokeControl_;

         private long totalSize;

         private long currentSize;

         private long currentsizenum;

         public long TotalSize

         {

             get { return totalSize; }

         }

         public long CurrentSize

         {

             get { return this.currentsizenum; }

         }

         public float CurrentProgress

         {

             get

             {

                 if (this.totalSize != 0)

                 {

                     return (float)this.currentsizenum * 100 / (float)this.totalSize;

                 }

                 else

                 {

                     return 0;

                 }

             }

         }

         public string UploadMultipart(String bucketName, String objectName, String fileToUpload, int partSize, ShowProgressDelegate prosess, Control t)

         {

             invokeControl_ = t;

             process_ = prosess;

             var uploadId = InitiateMultipartUpload(bucketName, objectName);

             var partETags = UploadParts(bucketName, objectName, fileToUpload, uploadId, partSize);

             var completeResult = CompleteUploadPart(bucketName, objectName, uploadId, partETags);

             return completeResult.BucketName;

         }

         private static string InitiateMultipartUpload(String bucketName, String objectName)

         {

             var request = new InitiateMultipartUploadRequest(bucketName, objectName);

             var result = _ossClient.InitiateMultipartUpload(request);

             return result.UploadId;

         }

         private List<PartETag> UploadParts(String bucketName, String objectName, String fileToUpload, String uploadId, int partSize)

         {

             var fi = new FileInfo(fileToUpload);

             var fileSize = fi.Length;

             totalSize = fileSize;

             var partCount = fileSize / partSize; 

             if (fileSize % partSize != 0)

             {

                 partCount++;

             }

             long size = 0;

             var partETags = new List<PartETag>();

             for (var i = 0; i < partCount; i++)

             {

                 using (var fs = File.Open(fileToUpload, FileMode.Open))

                 {

                     var skipBytes = (long)partSize * i;

                     fs.Seek(skipBytes, 0);

                     size = (partSize < fileSize - skipBytes) ? partSize : (fileSize - skipBytes);

                     var request = new UploadPartRequest(bucketName, objectName, uploadId)

                     {

                         InputStream = fs,

                         PartSize = size,

                         PartNumber = i + 1

                     };

                     var result = _ossClient.UploadPart(request);

                     partETags.Add(result.PartETag);

                     currentSize = size;

                 }

                 currentsizenum += currentSize;

                 object[] objs = new object[] { 100, 0 };

                 objs[1] = (int)CurrentProgress;

                 invokeControl_.Invoke(process_, objs);

             }

             return partETags;

         }

         private 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);

             }

             return _ossClient.CompleteMultipartUpload(completeMultipartUploadRequest);

         }

    }

    第一次寫 還望各位大蝦 多多指教!感謝洋哥的指導

對OSS的操作