上一篇将 Azure Blob 存储的时候,有使用到一个 .NET Core Web 项目,经过代码的方式进行操做 Azure Blob 的数据,接着上一篇的内容,今天继续看一下代码,具体看看 Azure.Storage 中的类,方法。html
--------------------我是分割线--------------------git
Azure Blob Storage 存储系列:github
1,Azure Storage 系列(一)入门简介windows
2,Azure Storage 系列(二) .NET Core Web 项目中操做 Blob 存储api
3,Azure Storage 系列(三)Blob 参数设置说明安全
4,Azure Storage 系列(四)在.Net 上使用Table Storage app
{ "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 会向咱们提供两个访问密钥,这样,当从新生成其中一个时,能够使用另外一个保持链接。async
services.AddSingleton(x => new BlobServiceClient(Configuration.GetValue<string>("AzureBlobStorageConnectionString")));
初始化 建立一个BlobService类,而且在将 appsettings 中的 key 叫 ”AzureBlobStorageConnection“ 的 连接字符串的值看成参数放到构造函数中函数
services.AddSingleton<IBlobSergvice, BlobService>();
#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
#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 的名称添加到集合中。
#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
#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
#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
版权:转载请在文章明显位置注明做者及出处。如发现错误,欢迎批评指正。