Azure Storage 系列(二) .NET Core Web 项目中操作 Blob 存储,azure blob storage 数据怎么保存Azure Storage 系列(二) .NET Core Web 项目中操作 Blob 存储一,引言上一篇文章,我们介绍到在实际项目中系统会产生大量的日志文件,用户上传的头......
一,引言
上一篇文章,我们介绍到在实际项目中系统会产生大量的日志文件,用户上传的头像等等,同时也介绍到可以使用Azure Blob Storage来存储项目中的一些日志文件,用户头像,用户视频等等。这个时候,有人就会问到,那我大概明白Blob可以存放什么类型的数据了,这个时候就有人问一些问题了
1,什么是Blob?
答Azure Blob存储是非结构化的,它可以保存的数据类型是没有任何限制的。如,pdf文档,json文件,视频,txt文件等。我们常见的类型的文件,它统统可以进行存储。但是Blob不适合需要经常查询的结构化数据,比如说项目中使用的,它们具有比内存和本地磁盘更高的延迟,并且没有可让数据库高效运行查询的索引功能。但是,blob经常用与数据库一起用于存储不可查询的的数据,例如用户头像存储在Blob中,数据库中保存对应用户头像的Blob名称或URL(来自微软官方解释)
其实用可以这么说,如果项目中有对于的图片资源,视频资源,文件等资源,我们就可以考虑到将这些数据都存储在Azure Blob中。今天在文章的后半段我们将通过一个简单的.NET Core Web程序去操作Blob存储对象。
我是分割线
Azure Blob Storage存储系列:
1,Azure Storage系列(一)入门简介
2,Azure Storage系列(二).NET Core Web项目中操作Blob存储
3,Azure Storage系列(三)Blob参数设置说明
4,Azure Storage系列(四)在.Net上使用Table Storage
二,正文
开始之前我们看看Blob的类型
1,block blob(块blob):由不同大小的块构成,在写入到块blob时,需要将数据上传到块并将其提交到blob。
2,append blob(追加blob):是专用的块blob,它仅支持追加新数据,追加操作非常高效。追加blob非常适用于存储日志或写入流数据等方案。
3,page blob(页blob):专用于涉及随机存取读写的方案。页blob用于存储Azure虚拟机所使用的虚拟硬盘(VHD)文件,但它们非常适用于任何涉及到随机存取的方案。
今天我们演示的是block blob类似,实际项目中,我们是如何进行操作的
1,Azure Portal上进行创建blob数据
找到之前创建好的“cnbateblogaccount”Storage Account,点击图中圈起来的“Containers”,进行创建容器
点击“+Container”,进行创建容器
注意:这里的容器,我们可以理解为用来存储对象的容器
Name:“picturecontainer”
Public access level选择:“Private(no anonymous access)”(私有的,不允许匿名访问)
点击“Create
创建完成后,我们就可以在当前容器页面看到自己创建的”picturecontainer“信息。
我们点击容器进入,尝试在上传一张图片进行测试
点击“Select a file”进行选择
选择“background.jpg”,点击打开
勾选“Overwrite if file already exist”(如果文件存储,就覆盖)
点击“Upload”进行上传
我们可以看到上传的图片文件,并且它的Blob类型是“block blob”
同时,我们可以还有在Portal上进行预览,编辑操作。
ok,上述操作我们是在Azure Portal上进行操作的。接下来我们通过代码进行blob的增删查
2,通过ASP.NET Core Web项目进行Blob数据操作
vs2019新建Web项目
2.1,首先得安装Azure.Storage相关的包
NuGet:Azure.Storage.Blobs
我们创建BlobExplorerController控制器
[HttpGet({BlobName})]
public async TaskIActionResult GetBlob(string blobName)
{
var data = await blobService.GetBlobAsync(blobName);
return File(data.Content, data.ContentType);
}
2.2,创建IBlobService接口,和BlobService实现类,新增获取Blob的接口定义和具体实现方法
TaskBlobInfoGetBlobAsync(stringname);#region 01,获取Blob,根据blob名称+async TaskBlobInfo GetBlobAsync(string name)
/// summary
/// 获取Blob,根据blob名称
/// /summary
/// param name=nameblob名称/param
/// returns/returns
public async TaskAzure.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
创建BlobInfo返回实体信息
public class BlobInfo
{
public BlobInfo(Stream content, string contentType)
{
this.Content = content;
this.ContentType = contentType;
}
public Stream Content { get; set; }
public string ContentType { get; set; }
}
2.3配置链接字符串
Azure Portal中找到创建的“cnbateaccount”的Azure Blob Atorage,点击“Setting=gt;Access key”
复制图中的“Connection string”
将数据库链接字符串配置在项目的appsettings配置文件中
{
Logging: {
LogLevel: {
Default: Information,
Microsoft: Warning,
Microsoft.Hosting.Lifetime: Information
}
},
AllowedHosts: *,
AzureBlobStorageConnectionString: DefaultEndpointsProtocol=https;AccountName=cnbateblogaccount;AccountKey=FU01h022mn1
JjONp+ta0DAXOO7ThK3dxxxxxxxxxxxxxxxxx891n9nycsTLGZF83nJpGvTIZvO5VCVxxxxxx0wndOOQ==;
EndpointSuffix=core.windows.net
}
2.4,注入BlobService,BlobServiceClient
services.AddSingleton(x=gt;new BlobServiceClient(Configuration.GetValuelt;string(AzureBlobStorageConnectionString)));
services.AddSingletonlt;IBlobSergvice,BlobServicegt;();
Ok,我们启动项目进行测试
postman中输入:localhost:9001/Blobs/background.jpg,效果如下图所示:
浏览器访问:http://localhost:9001/Blobs/background.jpg,效果如下图所示:
ok,成功,成功获取到之前在Portal上传的图片
2.5,完善对Blob数据的新增,删除操作
BlobExplorerController完整代码
BlobExplorerController
IBlobSergvice接口类
IBlobSergvice
BlobService实现类
BlobService
UpLoadContentRequest
UpLoadContentRequest
UploadFileRequest
UploadFileRequest
FileExtensions扩展类
FileExtensions
目前我们分别添加了上传图片接口,上传文件接口,删除文件接口
我们分别在postman中进行测试
(1)上传图片
FilePath(文件路径):”C:\Users\admin\Desktop\2020904001.jpg“
FileName(文件名称):”2020904001.jpg“
点击”Send“,我们可以看到响应返回状态码(Status)”200 OK“
同时在Portal上也可以看到刚刚选择的”20200904001.jpg“文件
这里注意一下,为什么我们制定文件的路径,和名称就可以上传文件,并且可以在浏览器中查看,那是因为我们在上传文件中设置文件的请求头的原因
private static readonly FileExtensionContentTypeProvider provider = new FileExtensionContentTypeProvider();
public static string GetContentType(this string fileName)
{
if (!provider.TryGetContentType(fileName, out var contentType))
{
contentType = application/octetstream;
}
return contentType;
}
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() });
}
(2)上传json文件
Content:{Name:zhangsan,Reamrk:This is work!!!}
FileName:”log.json“
点击”Send“,上传Json文件
我们继续在Portal上进行查看上传的json文件
(3)查看Blob信息
接下来还是删除Blob数据的操作,我这里就不做演示了,大家可以自己调用接口进行测试
好的,那今天的内容就先到此结束,今天的目的只是通过简单的demo代码去演示如果操作Azure Blob数据,简单的跑跑代码,在.NET Core中的demo代码是怎么去写的,具体的Azure.Storage类中的方法,参数等今天的内容暂时不去解释。
鼓掌,撒花 ?????????
三,结尾
今天的文章大概介绍了在Portal上如何上传blob图片文件,以及写了一个简单的.NET Core demo程序,通过代码我们我们去控制Blob数据的增删改查,下一篇继续介绍Azure Storage在代码中的操作,也着重讲一下Azure.Storage中的类,以及方法的具体调用和说明。
github:https://github.com/yunqian44/Azure.Storage.git
作者:Allen
版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。
作者:Allen版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。
特别声明:以上文章内容仅代表作者本人观点,不代表ESG跨境电商观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与ESG跨境电商联系。
二维码加载中...
使用微信扫一扫登录
使用账号密码登录
平台顾问
微信扫一扫
马上联系在线顾问
小程序
ESG跨境小程序
手机入驻更便捷
返回顶部