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

3.2.6.4 开发应用

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

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

3.2.6.4 开发应用

本文使用.NET 存储客户端构建应用示例,涉及的内容包括客户端连接、访问文件共享、设置文件共享大小、为文件或文件共享生成共享访问签名、一个文件复制到另一个文件、将一个文件复制到一个 Blob、使用指标对文件存储进行故障排除。

1. 客户端连接

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

  1. CloudStorageAccount storageAccount = CloudStorageAccount.Parse(  
  2. CloudConfigurationManager.GetSetting("connection string"));  
  3. CloudFileClient fileClient = storageAccount.CreateCloudFileClient(); 

2. 访问文件共享

连接文件共享客户端,获取目录和文件操作如下:

  1. CloudFileShare share = fileClient.GetShareReference("logs");  
  2. if (share.Exists())  
  3. {  
  4. CloudFileDirectory rootDir = share.GetRootDirectoryReference();  
  5. CloudFileDirectory sampleDir = rootDir.GetDirectoryReference( "  
  6. CustomLogs");  
  7. if (sampleDir.Exists())  
  8. {  
  9. CloudFile file = sampleDir.GetFileReference("Log1.txt");  
  10. if (file.Exists())  
  11. {  
  12. Console.WriteLine(file.DownloadTextAsync().Result);  
  13. }  
  14. }  

3. 生成共享访问签名

从存储客户端库的 5.x 版开始,可以为文件共享或单个文件生成共享访问签名 (SAS)。还可以在文件共享上创建一个共享访问策略以管理共享访问签名。建议创建共享访问策略,因为它提供了一种在受到威胁时撤消 SAS 的方式。以下示例在一个共享上创建共享访问策略,然后使用该策略为共享中的一个文件提供 SAS 约束。

  1. CloudFileShare share = fileClient.GetShareReference("logs");  
  2. if (share.Exists())  
  3. {  
  4. // 配置SAS 访问策略  
  5. string policyName = "sampleSharePolicy" + DateTime.UtcNow.Ticks;  
  6. SharedAccessFilePolicy sharedPolicy = new SharedAccessFilePolicy()  
  7. {  
  8. SharedAccessExpiryTime = DateTime.UtcNow.AddHours(24),  
  9. Permissions = SharedAccessFilePermissions.Read | SharedAccess  
  10. FilePermissions.Write  
  11. };  
  12. // 应用SAS 访问策略  
  13. FileSharePermissions permissions = share.GetPermissions();  
  14. permissions.SharedAccessPolicies.Add(policyName, sharedPolicy);  
  15. share.SetPermissions(permissions);  
  16. // 获取共享SAS Token  
  17. CloudFileDirectory rootDir = share.GetRootDirectoryReference();  
  18. CloudFileDirectory sampleDir = rootDir.GetDirectoryReference  
  19. ("CustomLogs");  
  20. CloudFile file = sampleDir.GetFileReference("Log1.txt");  
  21. string sasToken = file.GetSharedAccessSignature(null, policyName);  
  22. Uri fileSasUri = new Uri(file.StorageUri.PrimaryUri.ToString() + sasToken);  

4. 设置文件共享大小

通过设置一个共享的配额,可以限制在该共享上存储的文件的总大小。如果在共享上文件的总大小超过在共享上设定的配额,则客户端将不能增加现有文件的大小或创建新文件,除非这些文件是空的。下面的示例演示如何检查共享的当前使用情况,以及如何设置共享的配额。

  1. CloudFileShare share = fileClient.GetShareReference("logs");  
  2. if (share.Exists())  
  3. {  
  4. // 检查共享的当前使用情况  
  5. Microsoft.WindowsAzure.Storage.File.Protocol.ShareStats stats = share.  
  6. GetStats();  
  7. Console.WriteLine("Current share usage: {0} GB", stats.Usage.ToString());  
  8. // 设置共享的配额  
  9. share.Properties.Quota = 10 + stats.Usage;  
  10. share.SetProperties();  
  11. share.FetchAttributes();  
  12. Console.WriteLine("Current share quota: {0} GB", share.Properties.Quota);  

5. 复制文件到文件

以下示例将文件复制到同一共享中的另一个文件。因为此操作在同一存储账户中的文件之间进行复制,所以可以使用密钥身份验证来进行复制。

  1. CloudFileShare share = fileClient.GetShareReference("logs");  
  2. if (share.Exists())  
  3. {  
  4. CloudFileDirectory rootDir = share.GetRootDirectoryReference();  
  5. CloudFileDirectory sampleDir = rootDir.GetDirectoryReference  
  6. ("CustomLogs");  
  7. if (sampleDir.Exists())  
  8. {  
  9. CloudFile sourceFile = sampleDir.GetFileReference("Log1.txt");  
  10. if (sourceFile.Exists())  
  11. {  
  12. CloudFile destFile = sampleDir.GetFileReference("Log1Copy.txt");  
  13. destFile.StartCopy(sourceFile);  
  14. Console.WriteLine(destFile.DownloadText());  
  15. }  
  16. }  

6. 复制文件到Blob

以下示例创建一个文件并将其复制到同一存储账户中的某个 blob。该示例为源文件创建一个SAS,服务在复制操作期间使用该 SAS 验证对源文件的访问。

  1. CloudFileShare share = fileClient.GetShareReference("sample-share");  
  2. share.CreateIfNotExists();  
  3. CloudFile sourceFile = share.GetRootDirectoryReference().GetFileReference  
  4. ("sample-file.txt");  
  5. sourceFile.UploadText("A sample file in the root directory.");  
  6. CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();  
  7. CloudBlobContainer container = blobClient.GetContainerReference("samplecontainer");  
  8. container.CreateIfNotExists();  
  9. CloudBlockBlob destBlob = container.GetBlockBlobReference("sample-blob.  
  10. txt");  
  11. // 为有效期为24 小时的文件创建SAS。  
  12. // 请注意,当您将文件复制到blob 或文件的blob 时,必须使用SAS 验证对源对象的访问权限,  
  13. 即使您在// 同一个文件中进行复制存储账户。  
  14. string fileSas = sourceFile.GetSharedAccessSignature(new SharedAccess  
  15. FilePolicy()  
  16. {  
  17. Permissions = SharedAccessFilePermissions.Read,  
  18. SharedAccessExpiryTime = DateTime.UtcNow.AddHours(24)  
  19. });  
  20. Uri fileSasUri = new Uri(sourceFile.StorageUri.PrimaryUri.ToString() +  
  21. fileSas);  
  22. destBlob.StartCopy(fileSasUri);  
  23. Console.WriteLine( " Source file contents: {0} " , sourceFile.  
  24. DownloadText());  
  25. Console.WriteLine( " Destination blob contents: {0} " , destBlob.  
  26. DownloadText()); 


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

51CTO读书频道二维码


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

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

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

读 书 +更多

Fedora Core 5 Linux架站与网管

Linux出色的网络功能堪称当今操作系统中的佼佼者,无论在功能还是在支持能力上都有令人满意的表现。Linux内置的多个服务器,几乎包含了目前...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊