|
|
51CTO旗下网站
|
|
移动端

3.2.3.3 开发应用

《Microsoft Azure 管理与开发(下册)平台服务PaaS》本书由世纪互联蓝云Microsoft Azure 开发技术支持团队的资深工程师们编写,主要阐述MicrosoftAzure PaaS 服务的开发应用,涉及计算服务、集成认证服务、数据存储服务、大数据服务等方面的内容。本节为大家介绍开发应用。

作者:世纪互联蓝云公司来源:电子工业出版社|2018-07-13 10:51

3.2.3.3 开发应用

本文使用.NET 存储客户端构建应用示例,涉及的内容包括客户端连接、创建容器、上传文件、模拟虚拟目录、遍历容器、遍历虚拟目录、访问文件元数据、下载及删除文件。

1. 使用NuGet 安装所需包的引用

可以使用NuGet 获取这两个包。执行以下步骤:

(1) 在“解决方案资源管理器”中,右击项目并选择“管理NuGet 包”。

(2) 在线搜索“WindowsAzure.Storage”,然后单击“安装”以安装存储客户端库和依赖项。

(3) 在线搜索“WindowsAzure.ConfigurationManager”,然后单击“安装”以安装 AzureConfiguration Manager。

2. 客户端连接

客户端API 提供了丰富的接口,连接方式也有多种方法,常用的连接操作示例:

  1. CloudStorageAccount storageAccount = CloudStorageAccount.Parse(  
  2. CloudConfigurationManager.GetSetting("connection string"));  
  3. CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 

3. 创建容器

在默认情况下,新容器是专用容器,如果需要容器具有公共访问权限,则需要手动设置访问权限类型,示例如下:

  1. CloudBlobContainer container = blobClient.GetContainerReference("files");  
  2. container.CreateIfNotExists();  
  3. container.SetPermissions(new BlobContainerPermissions {  
  4. PublicAccess = BlobContainerPublicAccessType.Blob }); 

4. 上传文件

Blob 适合存储各种大小的文件,单个文件最大可以达到4.75TB,对于超过200M 以上的文件,往往需要考虑分块上传的实现方案,后续会讨论该内容。同时,SDK 针对上传也提供了非常丰富的API 接口,详细可以参考API 接口定义。普通文件上传示例如下:

  1. CloudBlockBlob blob = container.GetBlockBlobReference("test.jpg");  
  2. using (var fileStream = System.IO.File.OpenRead(@"C:\test.jpg"))  
  3. {  
  4. blob.UploadFromStream(fileStream);  

5. 模拟虚拟目录

前文介绍了虚拟目录的方式,代码操作示例如下:

  1. CloudBlockBlob blob = container.GetBlockBlobReference( " files/images/  
  2. test.jpg");  
  3. using (var fileStream = System.IO.File.OpenRead(@"C:\test.jpg"))  
  4. {  
  5. blob.UploadFromStream(fileStream);  

6. 遍历容器

列出容器中的Blob 数据,可以理解为从根目录向下检索,代码操作示例如下:

  1. foreach (IListBlobItem item in container.ListBlobs())  
  2. {  
  3. if (item.GetType() == typeof(CloudBlockBlob))  
  4. {  
  5. // Block Blob  
  6. CloudBlockBlob blockBlob = (CloudBlockBlob)item;  
  7. ……  
  8. }  
  9. else if (item.GetType() == typeof(CloudPageBlob))  
  10. {  
  11. // Page Blob  
  12. CloudPageBlob pageBlob = (CloudPageBlob)item;  
  13. ……  
  14. }  
  15. else  
  16. {  
  17. // Append Blob  
  18. CloudAppendBlob AppendBlob = (CloudAppendBlob)item;  
  19. ……  
  20. }  

7. 遍历虚拟目录

如果容器中的文件存在通过虚拟目录组织的方式,遍历过程则需要基于递归方式进行,一层一层的扫描每一层目录组织,代码操作示例如下:

  1. foreach (IListBlobItem item in container.ListBlobs())  
  2. {  
  3. if (item.GetType() == typeof(CloudBlobDirectory))  
  4. {  
  5. // GOTO->foreach,执行递归遍历  
  6. }  
  7. else if (item.GetType() == typeof(CloudBlockBlob))  
  8. {  
  9. // Block Blob  
  10. CloudBlockBlob blockBlob = (CloudBlockBlob)item;  
  11. ……  
  12. }  
  13. else if (item.GetType() == typeof(CloudPageBlob))  
  14. {  
  15. // Page Blob  
  16. CloudPageBlob pageBlob = (CloudPageBlob)item;  
  17. ……  
  18. }  
  19. else  
  20. {  
  21. // Append Blob  
  22. CloudAppendBlob AppendBlob = (CloudAppendBlob)item;  
  23. ……  
  24. }  

8. 下载文件

若要下载Blob,请首先检索Blob 引用,然后调用Blob 对象的下载API。示例如下:

  1. // 使用 DownloadToStream 方法将 Blob 内容传输到一个流对象  
  2. using (var fileStream = System.IO.File.OpenWrite(@"E:\json.txt"))  
  3. {  
  4. blob.DownloadToStream(fileStream);  
  5. }  
  6. // 使用 DownloadToStream 方法将 Blob 内容保存到内存流,并从内存流读取文件内容  
  7. using (var memoryStream = new MemoryStream())  
  8. {  
  9. blob.DownloadToStream(memoryStream);  
  10. text = System.Text.Encoding.UTF8.GetString(memoryStream.ToArray());  

9. 删除文件

要删除 Blob,同样先要获取 Blob 引用,然后对其调用 Delete 或DeleteIfExists 方法。示例如下:

  1. blob = container.GetBlockBlobReference("dir/json.txt");  
  2. blob.Delete();  
  3. blob.DeleteIfExists(); 


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

鸟哥的Linux私房菜 基础学习篇(第二版)

本书全面而详细地介绍了Linux操作系统。全书分为5个部分:第一部分着重说明Linux的起源及功能,如何规划和安装Linux主机;第二部分介绍Linu...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊