[C#][.NET Core] Azure Storage Blob 手把手從頭開始 - 取得檔案內容、公開網址、限定公開讀取日期

2019-02-01

前幾篇討論了如何建立容器,建立檔案,建立資料夾的概念,這一篇我們要來透過程式開始讀取資料,除了一般讀取資料以外你其實可以透過取得公開網址並且在網址上面有簽章還有限定公開的讀取日期
sample url: https://dmtestblob1.blob.core.windows.net/donmablogsample/TEST2/TEST21/sampleText9.json?sv=2018-03-28&sr=c&sig=%2FaZwDXMh%2FF7K9tFf3%2B5mIUkjPahDZAbEFSAvUcYLMHc%3D&se=2019-02-01T02%3A25%3A27Z&sp=r


物換星移,似乎微軟要換成 v12 版本 了,  請參考新的文章 


讀取檔案內容 -透過 程式端讀取資料內容(.json 的文字檔) ,文中範例為讀取 TEST2/TEST21/sampleText9.json 下的資料

var connsctionString = "your_connection_string";
var cloudStorage = Microsoft.WindowsAzure.Storage.CloudStorageAccount.Parse(connsctionString);
//Create Container
var cloudBlobClient = cloudStorage.CreateCloudBlobClient();
var cloudBlobContainer = cloudBlobClient.GetContainerReference("donmablogsample");
var resultCreateContainer = cloudBlobContainer.CreateIfNotExistsAsync().Result;
Console.WriteLine("donmablogsample create already.");
//Get Dir
Microsoft.WindowsAzure.Storage.Blob.CloudBlobDirectory cloudBlobDirectory =
cloudBlobContainer.GetDirectoryReference("TEST2/TEST21/");
Console.WriteLine("Get File Content : TEST2/TEST21/sampleText9.json");
//Download Text
var result = cloudBlobDirectory.GetBlockBlobReference("sampleText9.json").DownloadTextAsync().Result;
Console.WriteLine("TEST2/TEST21/sampleText9.json content =>" + result);

取得公開網址和簽章-

接下來是我覺得 Azure Storage Blob 我覺得我最喜歡的功能之一,他可以發出一個讀取憑證,限定過期時間讓客戶端讀取資料,超過時間後就會自動過期,這就可以讓你在做系統的時候,像是生成下載的 excel 讓客戶下載後,讓他自動過期,之後你可能 Server 端只要在一個時間點在全部清除就好,這應用其實很多,這中間又不花你伺服器的頻寬資源或是硬碟空間,這根本可以當簡單的 CDN 用,備援部分 Azure 會幫你處理,收費又便宜,這不是一件好事嗎 :)

var connsctionString = "your_connection_string";
var cloudStorage = Microsoft.WindowsAzure.Storage.CloudStorageAccount.Parse(connsctionString);
var cloudBlobClient = cloudStorage.CreateCloudBlobClient();
var cloudBlobContainer = cloudBlobClient.GetContainerReference("donmablogsample");
var resultCreateContainer = cloudBlobContainer.CreateIfNotExistsAsync().Result;
Console.WriteLine("donmablogsample create already.");
// 設定可以開啟 60 秒,並且此簽章只能夠讀取
var sharedPolicy = new Microsoft.WindowsAzure.Storage.Blob.SharedAccessBlobPolicy()
{
SharedAccessExpiryTime = DateTime.UtcNow.AddSeconds(60),
Permissions = Microsoft.WindowsAzure.Storage.Blob.SharedAccessBlobPermissions.Read,
};
var sasContainerToken = cloudBlobContainer.GetSharedAccessSignature(sharedPolicy, null);
Microsoft.WindowsAzure.Storage.Blob.CloudBlobDirectory cloudBlobDirectory =
cloudBlobContainer.GetDirectoryReference("TEST2/TEST21/");
var uri = cloudBlobDirectory.GetBlockBlobReference("sampleText9.json").Uri;
Console.WriteLine("TEST2/TEST21/sampleText9.json Download Uri =>" + uri + sasContainerToken);
//這一行非必要 ,呼叫系統瀏覽器開始網址而已
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo("cmd", $"/c start " + uri + sasContainerToken.Replace("&", "^&")) { CreateNoWindow = true });




是不是很方便,原始碼中最後一行非必要,只是 因為我寫 Console 所以直接打開瀏覽器



透過 Azure Storage Explorer 也可以取得的檔案的網址和簽章



如果你覺得我寫得不好或是太簡單,請看下面的原文吧
reference:
https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blobs-overview
https://docs.microsoft.com/en-us/dotnet/api/microsoft.windowsazure.storage.blob.cloudblobcontainer.getsharedaccesssignature?view=azure-dotnet


當麻許的超技八 2014 | Donma Hsu Design.