一,引言

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

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

Azure Blob Storage 存储系列:

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

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

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

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

Azure Blob (三)参数设置说明的更多相关文章

  1. MySQL Database on Azure 参数设置

    在使用MySQL过程中,经常会根据需要对MySQL的参数进行一些设置和调整.作为PaaS版本的MySQL,MySQL Database on Azure在参数设置方面有一些限制,客户不能像使用on-p ...

  2. JVM系列三:JVM参数设置

    JVM系列三:JVM参数设置.分析   不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM.GC的参数,可以极大的减少由于GC工作,而导致的程序运 ...

  3. Python 操作 Azure Blob Storage

    笔者在<Azure 基础:Blob Storage>一文中介绍了 Azure Blob Storage 的基本概念,并通过 C# 代码展示了如何进行基本的操作.最近笔者需要在 Linux ...

  4. Azure Functions(二)集成 Azure Blob Storage 存储文件

    一,引言 上一篇文章有介绍到什么是 SeverLess ,ServerLess 都有哪些特点,以及多云环境下 ServerLess 都有哪些解决方案.在这众多解决方案中就包括 Function App ...

  5. [New Portal]Windows Azure Storage (14) 使用Azure Blob的PutBlock方法,实现文件的分块、离线上传

    <Windows Azure Platform 系列文章目录> 相关内容 Windows Azure Platform (二十二) Windows Azure Storage Servic ...

  6. hadoop(四): 本地 hbase 集群配置 Azure Blob Storage

    基于 HDP2.4安装(五):集群及组件安装 创建的hadoop集群,修改默认配置,将hbase 存储配置为 Azure Blob Storage 目录: 简述 配置 验证 FAQ 简述: hadoo ...

  7. AzCopy – 上传/下载 Windows Azure Blob 文件

    在我们收到的请求中,有一个频繁出现的请求是提供一种能在 Windows Azure Blob 存储与其本地文件系统之间轻松上传或下载文件的方法.一年半前, 我们很高兴地发布了 AzCopy, Wind ...

  8. [AWS vs Azure] 云计算里AWS和Azure的探究(6) - Amazon Simple Storage Service 和 Microsoft Azure Blob Storage

    这几天Nasuni公司出了一份报告,分析了各个云厂商的云存储的性能,包括Amazon S3,Azure Blob Storage, Google Drive, HP以及Rackspace.其中性能上A ...

  9. Azure Blob Storage 基本用法 -- Azure Storage 之 Blob

    Azure Storage 是微软 Azure 云提供的云端存储解决方案,当前支持的存储类型有 Blob.Queue.File 和 Table. 笔者在<Azure Table storage ...

随机推荐

  1. Hexo小技巧(包括如何插入本地图片)

    我在研究如何在Hexo中引用本地图片时,看到官方文档对此问题已给出了解决方法,并亲测有效.当然,我并不满足于仅仅知道这一个技巧.在大致阅读过官方文档后,我总结了之前我个人并不知道的几个关于Hexo写博 ...

  2. 14、Java文件操作stream、File、IO

    1.文件操作涉及到的基本概念 File File类 是文件操作的主要对象中文意义就是 文件 顾名思意 万物皆文件,在计算上看到的所有东西都是文件保存,不管是你的图片.视频.数据库数据等等都是按照基本的 ...

  3. Kubernetes 使用arthas进行调试

    环境 因为k8s中是最基本的jre,网上说缺少tools.jar,但是补充了以后还是不行,最后还是将整个jdk给移到容器中的. jre中执行: /home # /opt/jre/bin/java -j ...

  4. Loss 总结:IoU loss总结

    object detection 损失:更加接近人眼的损失 what is IoU 如果两个框没有相交,根据定义,IoU=0,不能反映两者的距离大小(重合度).同时因为loss=0,没有梯度回传,无法 ...

  5. CVE-2020-14644 weblogic iiop反序列化漏洞

    0x00 weblogic 受影响版本 Oracle WebLogic Server 12.2.1.3.0, 12.2.1.4.0, 14.1.1.0.0 0x01 环境准备 1.安装weblogic ...

  6. Solon Ioc 的注解对比Spring及JSR330

    注解对比 Solon 1.0.10 Spring JSR 330 @XInject * @Autowired @Inject 字段或参数注入 @XBean * @Component @Named Be ...

  7. vue keep-alive 不生效和多级(三级以上)缓存失败

    vue keep-alive https://cn.vuejs.org/v2/api/#keep-alive keep-alive 不生效的可能原因 如果安装官方的写法,已经正常完成keep-aliv ...

  8. Tun/Tap接口使用指导

    Tun/Tap接口指导 目录 Tun/Tap接口指导 概述 工作机制 创建接口 举例 简单的程序 隧道 拓展 参考 概述 对tun接口的了解需求主要来自于openshift的网络,在openshift ...

  9. 谈谈javascript的基本规范~~~~

    1.不要在同一行声明多个变量. 2.请使用===或==来比较true或false或者数值 3.使用对象字面量代替new Array这种形式 4.不要使用全局函数 5.switch语句必须带有defau ...

  10. centos iso镜像自动挂载

    vim /etc/fstab 添加如下行:/usr/ison/centos.iso /media/cdrom iso9660 defaults,loop 0 0