在前一模块中,已经介绍了如何获取 Azure 存储账户的密钥和连接字符串。这些连接字符串将在应用程序中使用。首先,需要了解如何获取存储账户的连接字符串。通过 Azure 门户访问存储账户,选择账户,然后进入“访问密钥”部分,在这里将找到密钥和连接字符串。复制其中一个连接字符串,将在应用程序中使用它。
现在,创建一个C#控制台应用程序(可以选择创建 Web 或 Windows 项目)。接下来,需要从 NuGet 包管理器(NPM)安装 WindowsAzure.Storage 包。打开 NPM 控制台(NPM),通过运行以下命令安装 WindowsAzure.Storage:
PM> Install-Package WindowsAzure.Storage -Version 9.3.3
安装完成后,解决方案中将添加几个引用:
现在应用程序已经准备好访问 Azure存储账户中的文件了。请注意,从 9.4.0 版本开始,库被拆分为多个部分,例如 Microsoft.Azure.Storage.Blob、Microsoft.Azure.Storage.File、Microsoft.Azure.Storage.Queue 和 Microsoft.Azure.Storage.Common。
首先,在应用程序中设置连接字符串。将其设置在 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 传递流。
删除 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();
}