Azure Storage 系列(三)Blob 参数设置说明

一,引言

  上一篇将 Azure Blob 存储的时候,有使用到一个 .NET  Core Web 项目,通过代码的方式进行操作 Azure Blob 的数据,接着上一篇的内容,今天继续看一下代码,具体看看 Azure.Storage 中的类,方法。

--------------------我是分割线--------------------

Azure Blob Storage 存储系列:

1,Azure Storage 系列(一)入门简介

2,Azure Storage 系列(二) .NET Core Web 项目中操作 Blob 存储

3,Azure Storage 系列(三)Blob 参数设置说明

4,Azure Storage 系列(四)在.Net 上使用Table Storage

5,Azure Storage 系列(五)通过Azure.Cosmos.Table 类库在.Net 上使用 Table Storage  

6,Azure Storage 系列(六)使用Azure Queue Storage

二,正文

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 对象,在其构造函数中传入返回值的 ContentContentType

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 调用 ContainerClientGetBlobsAsync“ 的方法,当前方法有多个默认参数

    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 

版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。

 

posted @ 2020-09-07 16:51  Grant_Allen  阅读(438)  评论(11编辑  收藏