zoukankan      html  css  js  c++  java
  • 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";
  • 相关阅读:
    WPF:linq
    WPF:ListView数据绑定及Style
    WPF: DatePicker
    多线程16--单例--懒汉模式和静态内部类形
    多线程15--线程本地变量ThreadLocal
    多线程14---模拟消息队列
    多线程13--多线程并发购票--低效的线程安全的车票容器
    多线程10--线程间实时通信--耗性能的轮询
    自定义video的controls(播放暂停按钮、进度条、快进快退等)
    js+css 写出 简单2048游戏
  • 原文地址:https://www.cnblogs.com/riusmary/p/5707932.html
Copyright © 2011-2022 走看看