Azure Blob Storage 微軟Azure線上儲存空間

Azure用來儲存圖片 文件的線上空間位置

第一步當然是去Azure申請Blob服務  

(2017/9/25補充更新)
可以使用Azure Storage Emulator進行開發測試,他會模擬Blob線上環境,請閱讀 https://dotblogs.com.tw/nigelhome/2017/09/25/azure-storage-emulator


然後開立一個儲存體

然後可以在Access keys看到Blob的存取密碼 


在Config檔內將加上Blob連線字串(非必要)

<!--AccountName就是Blob儲存體名稱 AccountKey就是Access key-->

<configuration>
  <appSettings>
    <add key="BlobStr" value="DefaultEndpointsProtocol=https;AccountName=xxxxxxxx;AccountKey=xxxxxxxxxxxxxxx"/>
  </appSettings>
</configuration>

接下來建立下面範例為用連線字串建立Client 並且讀寫檔案

    public class BlobService
    {
        private CloudBlobClient blobClient;
        private const string containerName = "testcontainer";

        public BlobService()
        {
            //建立帳號的Client
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["BlobStr"]);
            blobClient = storageAccount.CreateCloudBlobClient();
        }

        /// <summary>
        /// 上傳檔案
        /// </summary>
        /// <param name="file"></param>
        public void UploadFile(HttpPostedFileBase file)
        {
            if (file == null || file.ContentLength == 0)
            {
                return;
            }

            InsertBlob(file.InputStream);
        }

        private void InsertBlob(Stream stream)
        {
            try
            {
                //在blob底下找尋容器(類似資料夾) 找不到就建立它
                var container = blobClient.GetContainerReference(containerName);
                container.CreateIfNotExists();
                //把Container的開放權限打開
                container.SetPermissions(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob });
                
                //在Container底下建立一個區塊(一個區塊一個檔案)
                var blockBlob = container.GetBlockBlobReference("myblockblob");
                //把檔案傳到區塊上
                blockBlob.UploadFromStream(stream);
            }
            catch(Exception ex)
            {
                Debug.WriteLine(ex.Message);
            }
        }

        /// <summary>
        /// 從Blob讀取檔案
        /// </summary>
        /// <returns></returns>
        public byte[] ReadBlob()
        {
            //在blob底下找尋容器
            var container = blobClient.GetContainerReference(containerName);
            //在容器內找尋檔案區塊
            var blockBlob = container.GetBlockBlobReference("myblockblob");

            //把區塊的檔案下載到記憶體
            var ms = new MemoryStream();
            blockBlob.DownloadToStream(ms);

            return ms.ToArray();

        }

    }