.Net程序測試阿里雲OSS開放存儲服務


阿里雲官網有提供OSS相關的操作API文檔和.Net程序的 SDK,也可以在這里下載OSS相關文件

但是API文檔里面的都是通過http請求和響應的消息來描述如何操作OSS的

而一般在程序中需要的是OSS操作類的說明

本文將通過.Net SDK來創建一個簡單的程序連接並測試OSS,並舉出幾個常見的操作例子

在所有測試開始之前,首先要知道連接並操作OSS上面Bucket或Object的大概流程(關於Bucket和Object的概念詳見官網解釋)

OssClient類

顧名思義,是客戶端連接OSS並提供相關操作的類

其構造函數有四個,詳見.Net SDK幫助文檔,如圖:


本文中只是用第二個構造函數(其余可自行研究)

OssClient ossClient = new OssClient("OSS的地址","AccessId","AccessKey");

三個參數中,OSS的地址是根據OSS所在的地區決定的

比如在深圳的OSS地址為http://oss-cn-shenzhen.aliyuncs.com

杭州的OSS地址為http://oss-cn-hangzhou.aliyuncs.com

其余地區類似

AccessId和AccessKey可以在阿里雲用戶中心得到

點擊用戶中心,進入我的服務

我們可以通過一個OssManager類來管理和創建OssClient

    public static class OssManager
    {
        private static string _accessId = "youAccessId";
        private static string _accessKey = "yourAccessKey";
        private static string _http = "http://oss-cn-shenzhen.aliyuncs.com";

        private static OssClient ossClient;

        public static OssClient GetInstance()
        {
            if (ossClient == null)
            {
                ossClient = new OssClient(_http, _accessId, _accessKey);
            }
            return ossClient;
        }

        
    }


Bucket常見操作:


創建Bucket和刪除Bucket

由於這兩種操作的代碼類似,只是操作類型不一樣

所以定義一個枚舉

    public enum OperationType
    {
        Create,
        Delete
    }

新建BucketOperator類

public static class BucketOperator
    {
        /// <summary>
        /// Bucket操作的方法
        /// </summary>
        /// <param name="type">操作類型</param>
        /// <param name="bucketName">bucketName</param>
        /// <param name="msg">輸出的消息</param>
        /// <returns>0表示成功,否則失敗</returns>
        public static int Operator(OperationType type, string bucketName, out string msg)
        {
            if (bucketName == "")
            {
                msg = "please input the bucket name!";
                return -1;
            }
            //獲得一個OssClient實利
            OssClient client = OssManager.GetInstance();
            try
            {
                //判斷操作類型
                switch (type)
                {
                    case OperationType.Create:
                        //執行創建Bucket
                        client.CreateBucket(bucketName);
                        break;
                    case OperationType.Delete:
                        //執行刪除Bucket
                        client.DeleteBucket(bucketName);
                        break;
                    default:
                        break;
                }
                msg = "";
                return 0;

            }
            //通過OssException Oss異常類來捕獲異常
            catch (OssException ex)
            {
                //創建Bucket時該名稱的Bucket已存在
                if (ex.ErrorCode == OssErrorCode.BucketAlreadyExists)
                {
                    msg = string.Format("Bucket '{0}' already exists, please modify and recreate it.",
                        bucketName);
                }
                //其他異常處理
                else
                {
                    msg =
                        string.Format("Create failed. Error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
                            ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
                }
                return -1;
            }
        }
    }


接下來建立一個web應用程序來測試

在項目中添加BucketTest.aspx頁面,拖入一個文本框以輸入BucketName和兩個按鈕

在后台按鈕的點擊事件中調用OssManeger類和BuekctOperator類來進行Bucket的創建和刪除操作

protected void btnCreate_Click(object sender, EventArgs e)
        {
            string msg = "";
            int res = BucketOperator.Operator(OperationType.Create, txtName.Text, out msg);
            if (res != 0)
            {
                Response.Write(msg);
            }
        }

        protected void btnDelete_Click(object sender, EventArgs e)
        {
            string msg = "";
            int res = BucketOperator.Operator(OperationType.Delete, txtName.Text, out msg);
            if (res != 0)
            {
                Response.Write(msg);
            }
        }


接下來就可以就行對Bucket操作的測試了

先打開OSS控制台,可以看到Bucket只有一個:jchubby

運行BucketTest.aspx頁面

輸入jchubby1,點擊創建

重新刷新Bucket列表,創建成功

輸入一個已經存在的Bucket名,如:bookshop

添加失敗,輸出失敗異常的信息


輸入jchubby1點擊刪除,再次刷新Bucket列表,jchubby1刪除成功


新建ObjectTest.aspx頁面

Object常見操作:

PutObject--將一個指定的Object加入指定的Bucket中

說白了這個方法就是講本地的一個文件轉成OssObject然后存儲到OSS中指定的Bucket中

由於是Web頁面,這里使用到了SWFUpload上傳文件

有關SWFUpload的配置使用請看:SWFUpload配置

注意,在IE瀏覽器可能會禁用加載一些選項導致SWFUpload無法顯示

設置SWFUpload的接受頁面是upload.ashx

在upload.ashx ProcessRequest方法中,代碼如下:

public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            //獲得上傳的文件
            HttpPostedFile file = context.Request.Files["Filedata"];
            if (file != null)
            {
                //獲取當前時間
                string firstName = DateTime.Now.ToString("yyyyMMddHHmmssfff");
                //獲取文件后綴
                string lastName = Path.GetExtension(file.FileName);
                //組合成保存的文件名
                string fullName = firstName + lastName;
                //if (!string.IsNullOrEmpty(c.prefix))
                //    fullName = c.prefix + "/" + fullName;
                ObjectMetadata metadata = new ObjectMetadata();
                // 可以設定自定義的metadata。
                metadata.ContentType = file.ContentType;
                //獲取該文件的輸入流
                using (var fs = file.InputStream)
                {
                    OssClient ossClient = OssManager.GetInstance();
                    //將該文件流保存到OSS中
                    var ret = ossClient.PutObject("jchubby", fullName, fs, metadata);
                }
                context.Response.Write("ok;" + fullName);
            }
        }


運行ObjectTest.aspx頁面


點擊批量上傳

隨便選擇兩個文件


確定之后開始上傳

成功之后到OSS控制台對應的Bucket下查看

上傳成功



ListObjects("bucketName")--獲得指定Bucket下的所有Object列表

在ObjectTest頁面的Page_Load事件中獲得指定Bucket下的Object列表,並顯示

代碼如下:

protected List<OssObjectSummary> list;
        private OssClient client;
        protected void Page_Load(object sender, EventArgs e)
        {
            client = OssManager.GetInstance();
            ObjectListing listing = client.ListObjects("jchubby");
            list = listing.ObjectSummaries.ToList();
        }

在前台頁面,通過一個foreach遍歷list集合

<table>
            <tr>
                <td>BucketName
                </td>
                <td>Key
                </td>
                <td>LastModified
                </td>
                <td>Size
                </td>
                <td>StorageClass
                </td>
                <td>
                    Operation
                </td>
            </tr>
            <% foreach (OssObjectSummary item in list)
               {
            %>
            <tr>
                <td><%=item.BucketName %>
                </td>
                <td><%=item.Key %>
                </td>
                <td><%=item.LastModified %>
                </td>
                <td><%=item.Size %>
                </td>
                <td><%=item.StorageClass %>
                </td>
            </tr>
            <% } %>
        </table>


運行ObjectTest頁面

獲取成功

關於OssObjectSummary類的相關屬性請看.Net SDK幫助文檔


GetObject--獲得執行Bucket下執行的Object

DeleteObject--刪除指定Bucket下的Object

GetObject這個方法其實就是根據給的BucketName和ObjectKey來得到OSS上存儲的文件

要保存在本地電腦的話需要用文件流來保存

在ObjectTest頁面中拖入控件如下:

在獲取按鈕的點擊事件中,代碼如下:

protected void btnGet_Click(object sender, EventArgs e)
        {
            //獲取Object
            OssObject obj = client.GetObject("jchubby", txtName.Text.Trim());
            if (obj != null)
            {
                try
                {
                    // Object流處理 
                    int numBytesRead = 0;
                    int numBytesToRead = (int)obj.Metadata.ContentLength;
                    byte[] bytes = new byte[numBytesToRead];
                    FileStream fs = new FileStream("F:\\" + obj.Key, FileMode.Create);
                    // 將流寫入本地文件保存 
                    while (numBytesToRead > 0)
                    {
                        int n = obj.Content.Read(bytes, numBytesRead, Math.Min(numBytesToRead, int.MaxValue));
                        if (n <= 0)
                        { break; }
                        fs.Write(bytes, numBytesRead, n);
                        numBytesRead += n;
                        numBytesToRead -= n;
                    }
                    fs.Close();
                    Response.Write("GetObject Done");
                }
                //異常處理 
                catch (OssException ex)
                {
                    Response.Write(string.Format("ErrorCode:{0}\n Message:{1}", ex.ErrorCode, ex.Message));
                }
            }
        }


在刪除按鈕的點擊事件中,代碼如下:

 protected void btnDel_Click(object sender, EventArgs e)
        {
            try
            {
                client.DeleteObject("jchubby", txtName.Text.Trim());
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
        }


運行測試頁面

輸入一個已存在的Object名

點擊獲取

保存完畢之后,在指定的文件夾下已存在該文件


點擊刪除,刷新Object列表

該文件已從OSS上刪除



CopyObject--將指定的Object復制為另外一個Object

ObjectTest頁面加入以下控件:

在復制按鈕的點擊事件中,代碼如下:

protected void btnCopy_Click(object sender, EventArgs e)
        {
            CopyObjectResult res = client.CopyObject(new CopyObjectRequest("jchubby", txtOldName.Text.Trim(), "jchubby", txtNewName.Text.Trim()));
            if (res != null)
            {
                Response.Write("ok");
            }
        }

運行結果可自行測試



以上為OSS比較常見的操作,全部源碼Demo下載:點擊打開鏈接





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM