一,引言
上一篇将 Azure Blob 存储的时候,有使用到一个 .NET Core Web 项目,通过代码的方式进行操作 Azure Blob 的数据,接着上一篇的内容,今天继续看一下代码,具体看看 Azure.Storage 中的类,方法。
--------------------我是分割线--------------------
Azure Blob Storage 存储系列:
2,Azure Storage 系列(二) .NET Core Web 项目中操作 Blob 存储
3,Azure Storage 系列(三)Blob 参数设置说明
二,正文
1,配置 Blob 连接字符串
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*", "AzureBlobStorageConnectionString": "DefaultEndpointsProtocol=https;AccountName=cnbateblogaccount;AccountKey=FU01h022mn1JjONp+ta0DAXOO7ThK3diY891n9nycsTLGZF83nJpGVCVFhGOfV0wndOOQ==;EndpointSuffix=core.windows.net" }
”AzureBlobStorageConnectionString“ 向此 Azure 存储帐户提出请求时,使用访问密钥对应用程序进行身份验证。请采用安全的方式(例如使用 Azure Key Vault)保存访问密钥,不要共享密钥。建议定期重新生成访问密钥。
Azure 会向我们提供两个访问密钥,这样,当重新生成其中一个时,可以使用另一个保持连接。
2,注入 BlobServiceClient,BlobService
BlobServiceClient
services.AddSingleton(x => new BlobServiceClient(Configuration.GetValue<string>("AzureBlobStorageConnectionString")));
初始化 创建一个BlobService类,并且在将 appsettings 中的 key 叫 ”AzureBlobStorageConnection“ 的 链接字符串的值当作参数放到构造函数中
BlobService
services.AddSingleton<IBlobSergvice, BlobService>();
3,BlobService 方法
3.1,获取 Blog 信息
#region 01,获取Blob,根据blob名称+async Task<BlobInfo> GetBlobAsync(string name) /// <summary> /// 获取Blob,根据blob名称 /// </summary> /// <param name="name">blob名称</param> /// <returns></returns> public async Task<Azure.Storage.Models.BlobInfo> GetBlobAsync(string name) { var containerClient = _blobServiceClient.GetBlobContainerClient("picturecontainer"); var blobClient = containerClient.GetBlobClient(name); var blobDownLoadInfo = await blobClient.DownloadAsync(); return new Azure.Storage.Models.BlobInfo(blobDownLoadInfo.Value.Content, blobDownLoadInfo.Value.ContentType); } #endregion
获取 Blob 存储信息具体实现方法,
1,首先我们可以看到先通过 "picturecontainer" 名称获取到 ContainerClient,再通过需要的 Blob 名称获取到 BlobClient
2,其次,通过异步的方法 “DownloadAsync” 进行下载 Blob 对象,其中包括 Blob 元数据,属性等信息
3,最后,我们将返回创建 BlobInfo 对象,在其构造函数中传入返回值的 Content 和 ContentType
3.2,获取 Blog 信息
#region 02,获取所有Blob名称+async Task<IEnumerable<string>> ListBlobsNameAsync() /// <summary> /// 获取所有Blob名称 /// </summary> /// <returns></returns> public async Task<IEnumerable<string>> ListBlobsNameAsync() { var containerClient = _blobServiceClient.GetBlobContainerClient("picturecontainer"); var items = new List<string>(); await foreach (var blobItem in containerClient.GetBlobsAsync()) { items.Add(blobItem.Name); } return items; } #endregion
获取 Blob 存储信息具体实现方法,
1,首先我们可以看到先通过 "picturecontainer" 名称获取到 ContainerClient,再通过需要的 Blob 名称获取到 BlobClient
2,其次,通过异步 foreach 调用 ContainerClient 的 GetBlobsAsync“ 的方法,当前方法有多个默认参数
BlobTraits(Blob特性):默认获取包含所有特性的标识
BlobStates(Blob状态):指定应包含所有状态的Blob的标志
prefix(前缀):指定一个字符串,该字符串对结果进行过滤以仅返回其名称以指定的开头的 Blob 前缀
cancellationToken:传播有关应取消操作的通知
3,最后,将每一项的 Blob 的名称添加到集合中。
3.3,根据文件路径和文件名称上传文件
#region 03,上传文件,根据文件路径和文件名称+async Task UploadFileBlobAsync(string filePath, string filename) /// <summary> /// 上传文件,根据文件路径和文件名称 /// </summary> /// <param name="filePath">文件路径</param> /// <param name="filename">文件名称</param> /// <returns></returns> public async Task UploadFileBlobAsync(string filePath, string filename) { var containerClient = _blobServiceClient.GetBlobContainerClient("picturecontainer"); var blobClient = containerClient.GetBlobClient(filename); await blobClient.UploadAsync(filePath, new BlobHttpHeaders { ContentType = filePath.GetContentType() }); } #endregion
上传Blob数据具体实现方法
1,首先我们可以看到先通过 "picturecontainer" 名称获取到 ContainerClient,再通过需要的 Blob 名称获取到 BlobClient
2,最后通过异步上传文件,此时需要指定文件的路径,以及在 BlobHttpHeaders 中指定文件内容的 ContentType
3.4,上传流
#region 04,上传文件流,根据文件内容和文件名称+async Task UploadContentBlobAsync(string content, string filename) /// <summary> /// 上传文件流,根据文件内容和文件名称 /// </summary> /// <param name="content">文件内容</param> /// <param name="filename">文件名称</param> /// <returns></returns> public async Task UploadContentBlobAsync(string content, string filename) { var containerClient = _blobServiceClient.GetBlobContainerClient("picturecontainer"); var blobClient = containerClient.GetBlobClient(filename); var bytes = Encoding.UTF8.GetBytes(content); await using var memoryStream = new MemoryStream(bytes); await blobClient.UploadAsync(memoryStream, new BlobHttpHeaders() { ContentType = filename.GetContentType() }); } #endregion
上传Blob数据具体实现方法
1,首先我们可以看到先通过 "picturecontainer" 名称获取到 ContainerClient,再通过需要的 Blob 名称获取到 BlobClient
2,其次,将上传的字符串转化成字节流
3,最后通过异步字节流上传,以及在 BlobHttpHeaders 中指定文件内容的 ContentType
3.5 删除 Blob 数据
#region 05,删除Blob+async Task DeleteBlobAsync(string blobName) /// <summary> /// 删除Blob /// </summary> /// <param name="blobName">blob名称</param> /// <returns></returns> public async Task DeleteBlobAsync(string blobName) { var containerClient = _blobServiceClient.GetBlobContainerClient("picturecontainer"); var blobClient = containerClient.GetBlobClient(blobName); await blobClient.DeleteIfExistsAsync(); } #endregion
删除blob 具体实现方法
1,首先我们可以看到先通过 "picturecontainer" 名称获取到 ContainerClient,再通过需要的 Blob 名称获取到 BlobClient
2,最后 调用异步 ”DeleteIfExistsAsync“ 方法,将 blob进行删除
ok,具体针对于Blob 的增 删 查 的方法就介绍完成
三,结尾
今天内容较少,只是把上一篇关于Blob操作的一些方法贴了出来,讲了一下对于 Blob 的操作,大家也可以通过微软官方文档:Azure Storage Blobs。下一篇将开始新的介绍 Storage 的新内容-----Azure Table Storage
github:https://github.com/yunqian44/Azure.Storage.git
作者:Allen
版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。