Azure 存储账户和 Blob 存储操作

存储账户的连接字符串

在前一模块中,已经介绍了如何获取 Azure 存储账户的密钥和连接字符串。这些连接字符串将在应用程序中使用。首先,需要了解如何获取存储账户的连接字符串。通过 Azure 门户访问存储账户,选择账户,然后进入“访问密钥”部分,在这里将找到密钥和连接字符串。复制其中一个连接字符串,将在应用程序中使用它。

设置C#项目以访问存储账户

现在,创建一个C#控制台应用程序(可以选择创建 Web 或 Windows 项目)。接下来,需要从 NuGet 包管理器(NPM)安装 WindowsAzure.Storage 包。打开 NPM 控制台(NPM),通过运行以下命令安装 WindowsAzure.Storage:

PM> Install-Package WindowsAzure.Storage -Version 9.3.3

安装完成后,解决方案中将添加几个引用:

  • Microsoft.WindowsAzure.KeyVault.Core
  • Microsoft.Windows.Azure.Storage
  • Newtonsoft.Json

现在应用程序已经准备好访问 Azure存储账户中的文件了。请注意,从 9.4.0 版本开始,库被拆分为多个部分,例如 Microsoft.Azure.Storage.Blob、Microsoft.Azure.Storage.File、Microsoft.Azure.Storage.Queue 和 Microsoft.Azure.Storage.Common。

使用 C# 上传文件到 Blob 存储

首先,在应用程序中设置连接字符串。将其设置在 Web.Config 文件的 appSettings 部分。按照以下代码片段将文件上传到 Blob 存储:

using Microsoft.WindowsAzure.Storage; using Microsoft.WindowsAzure.Storage.Blob; private static string ConnectionSting { get { return "your connection string"; } } public static bool Upload() { try { var containerName = "your container name"; CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConnectionSting); CloudBlobClient client = storageAccount.CreateCloudBlobClient(); CloudBlobContainer container = client.GetContainerReference(containerName); var isCreated = container.CreateIfNotExists(); container.SetPermissionsAsync(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob }); using (FileStream fileStream = File.Open(@"C:\d\log.txt", FileMode.Open)) { using (MemoryStream memoryStream = new MemoryStream()) { memoryStream.Position = 0; fileStream.CopyTo(memoryStream); var fileName = "Test-log.txt"; CloudBlockBlob blob = container.GetBlockBlobReference(fileName); string mimeType = "application/unknown"; string ext = (fileName.Contains(".")) ? System.IO.Path.GetExtension(fileName).ToLower() : "." + fileName; Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(ext); if (regKey != null && regKey.GetValue("Content Type") != null) mimeType = regKey.GetValue("Content Type").ToString(); memoryStream.ToArray(); memoryStream.Seek(0, SeekOrigin.Begin); blob.Properties.ContentType = mimeType; blob.UploadFromStream(memoryStream); } } return true; } catch (Exception ex) { throw; } }

现在,刷新 Azure 门户中的 Blob 面板,将在那里找到文件。

上传文件后,是时候将文件作为流取回了。按照以下代码片段进行操作:

public static MemoryStream Download() { var containerName = "your container name"; var blobName = "blob name that you have set"; CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConnectionSting); CloudBlobClient client = storageAccount.CreateCloudBlobClient(); CloudBlobContainer container = client.GetContainerReference(containerName); CloudBlockBlob blockBlob = container.GetBlockBlobReference(blobName); var allBlobs = container.ListBlobs(); MemoryStream memStream = new MemoryStream(); blockBlob.DownloadToStream(memStream); return memStream; }

现在可以从内存流创建文件,或者通过 Web API 传递流。

使用C#删除 Blob

删除 Blob 的过程大致相同。创建存储账户和容器的实例,然后检查 Blob 是否存在。如果存在,则删除它。Microsoft 提供了一个内置函数 CloudBlockBlob.DeleteIfExists 来删除 Blob。

public static bool DeleteBlob() { var containerName = "your container name"; var blobName = "blob name that you have set"; CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConnectionSting); CloudBlobClient client = storageAccount.CreateCloudBlobClient(); CloudBlobContainer container = client.GetContainerReference(containerName); CloudBlockBlob blockBlob = container.GetBlockBlobReference(blobName); return blockBlob.DeleteIfExists(); }

要删除容器中的所有文件,需要遍历容器中的所有 Blob 并逐个删除。

public static bool DeleteContainer() { var containerName = "your container name"; CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConnectionSting); CloudBlobClient client = storageAccount.CreateCloudBlobClient(); CloudBlobContainer container = client.GetContainerReference(containerName); container.Delete(); }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485