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();
}
}