blob storage第一次親密接觸


由於azure上各個雲服務都是分開的,所以當一個地方生成文件后,我在別的地方想要讀取他就變得困難,不過azure上面有解決方案,就是azure blob storage。

在現有的訂閱賬號下,新建一個存儲blob,分私有和公共,私有的為私有存儲,外部鏈接無法訪問,公共則可以在外部直接通過鏈接進行存儲內容的訪問。

首先在cloud service和portal配置文件中均需添加一個key為storageAccount,value則為azure上的blobend,queueend,tableend,以及他的thumbprint

在configuration文件中配置改存儲名稱。

 public static string EmailFileContainer
        {
            get
            {
                return "email-response-save";
            }
        }

 

建立一個BlobClient類,用來執行blob事件。

 1 public class BlobClient
 2     {
 3         private static CloudBlobClient _cloudBlobClient;
 4 
 5         static BlobClient()
 6         {
 7             _cloudBlobClient = CloudStorageAccount.Parse(Config.CloudStorageAccount).CreateCloudBlobClient();
 8             _cloudBlobClient.RetryPolicy = new LinearRetry(TimeSpan.FromSeconds(1), 3);
 9         }
10         
11         /// <summary>
12         /// Get file from blob
13         /// </summary>
14         /// <param name="containerName"></param>
15         /// <param name="blobName"></param>
16         /// <param name="blobPath"></param>
17         public static void GetBlob(string containerName, string blobName, string blobPath)
18         {
19             var container = _cloudBlobClient.GetContainerReference(containerName);
20 
21             var blob = container.GetBlockBlobReference(blobName);
22             var mode = System.IO.FileMode.Create;
23             blob.DownloadToFileAsync(blobPath, mode);
24 
25             return;
26         }
27 
28         /// <summary>
29         /// Add file to blob
30         /// </summary>
31         /// <param name="containerName"></param>
32         /// <param name="blobName"></param>
33         /// <param name="blobPath"></param>
34         /// <param name="blobFileName"></param>
35         public static void AddBlob(string containerName, string blobName, string blobPath,string blobFileName)
36         {
37             var container = _cloudBlobClient.GetContainerReference(containerName);
38             container.CreateIfNotExists();
39 
40             var blob = container.GetBlockBlobReference(blobName);
41             var mode = System.IO.FileMode.Open;
42             blob.UploadFromFileAsync(blobPath+blobFileName, mode);
43 
44             return;
45         }
46 
47         public static void DeleteBlob(string containerName, string blobName)
48         {
49             var container = _cloudBlobClient.GetContainerReference(containerName);
50             container.CreateIfNotExists();
51 
52             var blob = container.GetBlockBlobReference(blobName);
53             blob.DeleteIfExistsAsync();
54 
55             return;
56         }
57 
58         public static void DeleteBlobContainer(string containerName)
59         {
60             var container = _cloudBlobClient.GetContainerReference(containerName);
61             container.CreateIfNotExists();
62 
63             foreach (var item in container.ListBlobs(null, false))
64             {
65                 foreach (var item1 in ((CloudBlobDirectory)item).ListBlobs())
66                 {
67                     foreach (var item2 in ((CloudBlobDirectory)item1).ListBlobs())
68                     {
69                         ((CloudBlockBlob)item2).DeleteIfExistsAsync();
70                     }
71                 }
72             }
73         }
74     }

執行寫入blob storage步驟。

 BlobClient.AddBlob(Config.EmailFileContainer, "MailExportTotalImage/"+ imgName, location, imgName); 

讀取blob storage中的文件。

 BlobClient.GetBlob(Config.EmailFileContainer, "MailExportAttachment1/" + sFileName, uploadPath + sFileName); 

 

將內存流數據存入TXT。

var fn = DateTime.Now.ToString("yyyyMMddHHmmss") + ".txt";
byte[] bs = stream.ToArray();
String contentStr = System.Text.Encoding.UTF8.GetString(bs);       
BlobClient.AddBlob(Config.FileContainer, fn, contentStr);

 

若要創建公共可訪問文件的鏈接,需在對應雲服務的configuration文件中申明一個設置名稱。

<ConfigurationSettings>
      <!--Local-->
      <Setting name="aaaa" value="bbbbbbbbbbb" />
        .
        .
        .
      <Setting name="EmailBlobStorage" value="http(s)://xxx.blob.core.chinacloudapi.cn/email-response-save/" />
 </ConfigurationSettings>

 

核心configuration文件中建立一個指向雲服務configuration特定設置名稱的屬性。

public static string EmailBlobStorage
        {
            get
            {
                return CloudConfigurationManager.GetSetting("EmailBlobStorage");
            }
        }

使用:

var location = Config.EmailBlobStorage; 
var imgsrc = location + "MailExportTotalImage/" + string.Format("{0:yyyy-MM-dd}", DateTime.Today.ToGmt8()) + _title + ".png";

 


免責聲明!

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



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