一,引言
上一篇将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
二,正文
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
services.AddSingleton(x => new BlobServiceClient(Configuration.GetValue("AzureBlobStorageConnectionString")));
初始化创建一个BlobService类,并且在将appsettings中的key叫”AzureBlobStorageConnection“的链接字符串的值当作参数放到构造函数中
BlobService
services.AddSingleton();
3,BlobService方法
3.1,获取Blog信息
#region 01,获取Blob,根据blob名称+async Task
///
/// 获取Blob,根据blob名称
///
/// blob名称
///
public async Task 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
///
/// 获取所有Blob名称
///
///
public async Task
{
var containerClient = _blobServiceClient.GetBlobContainerClient(“picturecontainer”);
var items = new List
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)
///
/// 上传文件,根据文件路径和文件名称
///
/// 文件路径
/// 文件名称
///
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)
///
/// 上传文件流,根据文件内容和文件名称
///
/// 文件内容
/// 文件名称
///
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)
///
/// 删除Blob
///
/// blob名称
///
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
版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。
作者:Allen版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。
凭借紧随年轻人的时尚潮流,TikTok吸引了大批用户,尽管目前TikTok的商业手段还未完全成熟,但TikTok在全球市场的扩张大家有目共睹,推广效应逐渐凸显。大部分出海品牌已经将TikTok列为推广的新途径。 TikTok作为正在席卷全球的内容消费平台,对于…
码刀科技(www.lekshop.cn)是国内知名企业级电商平台提供商,为企业级商家提供最佳的电商平台搭建(多种模式电商平台搭建:B2B/B2B2C/B2C/O2O/新零售/跨境等)、平台管理系统开发及互联网采购解决方案服务, 联系客服了解更多.