Azure Storage 系列(二) .NET Core Web 项目中操作 B

时间:2021-07-15 | 标签: | 作者:Q8 | 来源:Allen网络

小提示:您能找到这篇{Azure Storage 系列(二) .NET Core Web 项目中操作 B}绝对不是偶然,我们能帮您找到潜在客户,解决您的困扰。如果您对本页介绍的Azure Storage 系列(二) .NET Core Web 项目中操作 B内容感兴趣,有相关需求意向欢迎拨打我们的服务热线,或留言咨询,我们将第一时间联系您!

< ">一,引言

< font-size: 16px;">上一篇文章,我们介绍到在实际项目中系统会产生大量的日志文件,用户上传的头像等等,同时也介绍到可以使用Azure Blob Storage来存储项目中的一些日志文件,用户头像,用户视频等等。这个时候,有人就会问到,那我大概明白Blob可以存放什么类型的数据了,这个时候就有人问一些问题了

< font-size: 16px;">1,什么是Blob?

< font-size: 16px;">答Azure Blob存储是非结构化的,它可以保存的数据类型是没有任何限制的。如,pdf文档,json文件,视频,txt文件等。我们常见的类型的文件,它统统可以进行存储。但是Blob不适合需要经常查询的危机公关能力有哪些方面结构化数据,比如说项目中使用的,它们具有比内存和本地磁盘更高的延迟,并且没有可让数据库高效运行查询的索引功能。但是,blob经常用与数据库一起用于存储不可查询的的数据,例如用户头像存储在Blob中,数据库中保存对应用户头像的Blob名称或URL(来自微软官方解释)

< font-size: 16px;">其实用可以这么说,如果项目中有对于的图片资源,视频资源,文件等资源,我们就可以考虑到将这些数据都存储在Azure Blob中。今天在文章的后半段我们将通过一个简单的.NET Core Web程序去操作Blob存储对象。

< font-size: 16px;">--------------------我是分割线--------------------

< font-size: 16px;">Azure Blob Storage存储系列:

< font-size: 16px;">1,Azure Storage系列(一)入门简介

< font-size: 16px;">2,Azure Storage系列(二).NET Core Web项目中操作Blob存储

< font-size: 16px;">3,Azure Storage系列(三)Blob参数设置说明

< font-size: 16px;">4,Azure Storage系列(四)在.Net上使用Table Storage

< font-size: 16px;">二,正文

< font-size: 16px;">开始之前我们看看Blob的类型

< font-size: 16px;">1,block blob(块blob):由不同大小的块构成,在写入到块blob时,需要将数据上传到块并将其提交到blob。

< font-size: 16px;">2,append blob(追加blob):是专用的块blob,它仅支持追加新数据,追加操作非常高效。追加blob非常适用于存储日志或写入流数据等方案。

< font-size: 16px;">3,page blob(页blob):专用于涉及随机存取读写的方案。页blob用于存储Azure虚拟机所使用的虚拟硬腾讯社盘(VHD)文件,但它们非常适用于任何涉及到随机存取的方案。

< font-size: 16px;">今天我们演示的是block blob类似,实际项目中,我们是如何进行操作的

< font-size: 16px;">1,Azure Portal上进行创建blob数据

< font-size: 16px;">找到之前创建好的“cnbateblogaccount”Storage Account,点击图中圈起来的“Containers”,进行创建容器

< font-size: 16px;">

< font-size: 16px;">点击“+Container”,进行创建容器

< font-size: 16px;">注意:这里的容器,我们可以理解为用来存储对象的容器

< font-size: 16px;">

< font-size: 16px;">Name:“picturecontainer”

< font-size: 16px;">Public access level选择:“Private(no anonymous access)”(私有的,不允许匿名访问)

< font-size: 16px;">点击“Create"

< font-size: 16px;">

< font-size: 16px;">创建完成后,我们就可以在当前容器页面看到自己创建的”picturecontainer“信息。

< font-size: 16px;">

< font-size: 16px;">我们点击容器进入,尝试在上传一张图片进行测试

< font-size: 16px;">

< font-size: 16px;">点击“Select a file”进行选择

< font-size: 16px;">

< font-size: 16px;">选择“background.jpg”,点击"打开"

< font-size: 16px;">

< font-size: 16px;">勾选“Overwrite if file already exist”(如果文件存储,就覆盖)

< font-size: 16px;">点击“Upload”进行上传

< font-size: 16px;">

< font-size: 16px;">我们可以看到上传的图片文件,并且它的Blob类型是“block blob”

< font-size: 16px;">

< font-size: 16px;">同时,我们可以还有在Portal上进行预览,编辑操作。

< font-size: 16px;">

< font-size: 16px;">ok,上述操作我们是在Azure Portal上进行操作的。接下来我们通过代码进行blob的增删查

< font-size: 16px;">2,通过ASP.NET Core Web项目进行Blob数据操作

< font-size: 16px;">vs2019新建Web项目

< font-size: 16px;">

< font-size: 16px;">

< font-size: 16px;">2.1,首先得安装Azure.Storage相关的包

< font-size: 16px;">NuGet:Azure.Storage.Blobs

< font-size: 16px;">

< font-size: 16px;">我们创建BlobExplorerController控制器

< font-size: 16px;">

[HttpGet("{BlobName}")]

public async Task<IActionResult> GetBlob(string blobName)

{

     var data = await _blobService.GetBlobAsync(blobName);

     return File(data.Content, data.ContentType);

}

< font-size: 16px;">2.2,创建IBlobService接口,和BlobService实现类,新增获取Blob的接口定义和具体实现方法

< font-size: 16px;">

Task<BlobInfo> GetBlobAsync(string name);

#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

< font-size: 16px;">创建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; }

    }

< font-size: 16px;">2.3配置链接字符串

< font-size: 16px;">Azure Portal中找到创建的“cnbateaccount”的Azure Blob Atorage,点击“Setting=&gt;Access key”

< font-size: 16px;">复制图中的“Connection string”

< font-size: 16px;">

< font-size: 16px;">将数据库链接字符串配置在项目的appsettings配置文件中

{

  "Logging": {

    "LogLevel": {

      "Default": "Information",

      ": "Warning",

      .Hosting.Lifetime": "Information"

    }

  },

  "AllowedHosts": "*",

  "AzureBlobStorageConnectionString": "DefaultEndpointsProtocol=https;AccountName=cnbateblogaccount;AccountKey=FU01h022mn1

JjONp+ta0DAXOO7ThK3dxxxxxxxxxxxxxxxxx891n9nycsTLGZF83nJpGvTIZvO5VCVxxxxxx0wndOOQ==;

EndpointSuffix=core.windows.net"

}

< font-size: 16px;">2.4,注入BlobService,BlobServiceClient

< font-size: 16px;">services.AddSingleton(x=&gt;new BlobServiceClient(Configuration.GetValue&lt;string("AzureBlobStorageConnectionString")));

< font-size: 16px;">services.AddSingleton&lt;IBlobSergvice,BlobService&gt;();

< font-size: 16px;">Ok,我们启动项目进行测试

< font-size: 16px;">postman中输入:localhost:9001/Blobs/background.jpg,效果如下图所示:

< font-size: 16px;">

< font-size: 16px;">浏览器访问:http://localhost:9001/Blobs/background.jpg,效果如下图所示:

< font-size: 16px;">ok,成功,成功获取到之前在Portal上传的图片

< font-size: 16px;">2.5,完善对Blob数据的新增,删除操作

< font-size: 16px;">BlobExplorerController完整代码

< font-size: 16px;">BlobExplorerController

< font-size: 16px;">IBlobSergvice接口类

< font-size: 16px;">IBlobSergvice

< font-size: 16px;">BlobService实现类

< font-size: 16px;">BlobService

< font-size: 16px;">UpLoadContentRequest

< font-size: 16px;">UpLoadContentRequest

< font-size: 16px;">UploadFileRequest

< font-size: 16px;">UploadFileRequest

< font-size: 16px;">FileExtensions扩展类

< font-size: 16px;">FileExtensions

< font-size: 16px;">目前我们分别添加了上传图片接口,上传文件接口,删除文件接口

< font-size: 16px;">我们分别在postman中进行测试

< font-size: 16px;">(1)上传图片

< font-size: 16px;">FilePath(文件路径):”C:UsersadminDesktop2020904001.jpg“

< font-size: 16px;">FileName(文件名称):”2020904001.jpg“

< font-size: 16px;">点击”Send“,我们可以看到响应返回状态码(Status)”200 OK“

< font-size: 16px;">

< font-size: 16px;">同时在Portal上也可以看到刚刚选择的”20200904001.jpg“文件

< font-size: 16px;">

< font-size: 16px;">

< font-size: 16px;">这里注意一下,为什么我们制定文件的路径,和名称就可以上传文件,并且可以在浏览器中查看,那是因为我们在上传文件中设置文件的请求头的原因

private static readonly FileExtensionContentTypeProvider provider = new FileExtensionContentTypeProvider();


        public static string GetContentType(this string fileName)

        {

            if (!provider.TryGetContentType(fileName, out var contentType))

            {

                contentType = "application/octet-stream";

            }

            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() });



        }

< font-size: 16px;">(2)上传json文件

< font-size: 16px;">Content:"{"Name":"zhangsan","Reamrk":"This is work!!!"}"

< font-size: 16px;">FileName:”log.json“

< font-size: 16px;">点击”Send“,上传Json文件

< font-size: 16px;">

< font-size: 16px;">我们继续在Portal上进行查看上传的json文件

< font-size: 16px;">

< font-size: 16px;">

< font-size: 16px;">(3)查看Blob信息

< font-size: 16px;">

< font-size: 16px;">接下来还是删除Blob数据的操作,我这里就不做演示了,大家可以自己调用接口进行测试

< font-size: 16px;">好的,那今天的内容就先到此结束,今天的目的只是通过简单的demo代码去演示如果操作Azure Blob数据,简单的跑跑代码,在.NET Core中的demo代码是怎么去写的,具体的Azure.Storage类中的方法,参数等今天的内容暂时不去解释。

< font-size: 16px;">鼓掌,撒花??????????

< font-size: 16px;">三,结尾

< font-size: 16px;">今天的文章大概介绍了在Portal上如何上传blob图片文件,以及写了一个简单的.NET 营销推广资讯Core demo程序,通过代码我们我们去控制Blob数据的增删改查,下一篇继续介绍Azure Storage在代码中的操作,也着重讲一下Azure.Storage中的类,以及方法的具体调用和说明。

< font-size: 16px;">github:https://github.com/yunqian44/Azure.Storage.git

< font-size: 16px;">作者:Allen

< font-size: 16px;">版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。

< font-size: 16px;">作者:Allen版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。

Azure Storage 系列(二) .NET Core Web 项目中操作 B

上一篇:Azure Storage 系列(一)入门简介
下一篇:PayPal通过派安盈(Payoneer)提现到国内(教程及费


版权声明:以上主题为“Azure Storage 系列(二) .NET Core Web 项目中操作 B"的内容可能是本站网友自行发布,或者来至于网络。如有侵权欢迎联系我们客服QQ处理,谢谢。
相关内容
推荐内容
扫码咨询
    Azure Storage 系列(二) .NET Core Web 项目中操作 B
    打开微信扫码或长按识别二维码

小提示:您应该对本页介绍的“Azure Storage 系列(二) .NET Core Web 项目中操作 B”相关内容感兴趣,若您有相关需求欢迎拨打我们的服务热线或留言咨询,我们尽快与您联系沟通Azure Storage 系列(二) .NET Core Web 项目中操作 B的相关事宜。

关键词:Azure,Storage,系列(二),.

关于 | 业务 | 案例 | 免责 | 隐私
客服邮箱:sales@1330.com.cn
电话:400-021-1330 | 客服QQ:865612759
沪ICP备12034177号 | 沪公网安备31010702002418号