更新: 2021-07-22

使用 Azure storage 以后, 还要解决一个 url 的问题. 文件自然是通过我们的 domain 来访问才合理丫.

这个是 azure 的 url : https://baccus.blob.core.windows.net/folder/file.txt

这个是我们希望的 url : https://www.baccus.com.my/folder/file.txt

所以我们还需要 custom domain, 而 custom domain 要配上 https 就需要 Azure DNS

DNS 是个好东西, 但是我项目太小所以作用不大, 这里就不说了.

具体怎么弄, 看这里

https://docs.microsoft.com/en-us/azure/storage/blobs/storage-custom-domain-name?tabs=azure-portal

做 web app 我目前都是把图片放在 VM disk 里, 这不是一个好的方案.

Azure 推荐的方式是用 Azure Storage 来存放和读取这些 static file.

这里就来试一试

refer :

https://www.cnblogs.com/sparkdev/p/6441421.html

https://ithelp.ithome.com.tw/articles/10227271 (铁人系列视频讲解) 推荐

https://www.cnblogs.com/AllenMaster/p/13589170.html (系列) 有 coding

https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-dotnet#get-the-connection-string (c# CRUD)

1. 去 azure 创建 storage account

需要注意的有几个

名字只可以小写或者号码....奇葩

Performance: Standard or Premium, Premium 是 SSD 所以比较快.但一般上使用 Standard

Account kind: StorageV2, Storage, BlobStorage (绝大部分情况下选择 v2 就可以了)

Replication: Locally-redundant storage (LRS) 等等 一般上就是选 LRS 而已, 它们主要的区别就是备份存哪里, 比如在同一个区, 或者同一个 data center, 或者外国.

分布的地方越远就越保险咯. 也就越贵咯. 备份的数据如果要支持可读也是可以的, 有点像当 cdn 来用来.

Blob access tier : Cool or Hot 一般上就是选 Hot, 除非你 storage 的目的是放历史记入, 有一种是读取的时候要提前解冻的, 适合做历史记入.

Storage 的结构是

Account > Container > Blob

Container 可以算是用来分类的吧, Blob 可以是 file or folder

做好了 account 现在做 container

主要是设置权限, 是否允许匿名访问. 一般上会选第 2 个, 意思就是只要你有 url 就可以访问了. 如果是遇到模式敏感资料的话, 那么就应该选第一个咯.

如果是授权访问的话, 就需要用到 SAS 了, 这个和 one drive 里面那种授权是一样的, 可以设置 read, delete, edit, create token 几时 expiry 等等. 也可以通过 access policy 来做一个统一的权限来管理. 不然一个一个 blob set SAS 要换的时候就蛮累的了.

然后就是创建 blob 了咯

blob type 分 3 种

Block Blob 图片, 视频, 文件等等

Page Blob 随机读写 hardisk 用的

Append Blob 给 log 用的

Access tier 就是 Hot, Cool, Archive (archive 就是那种要解冻才可以读的)

最后是可以选 folder. 所以 container 并不是当 folder 用的.

通过 portal 来管理 ui 体验不是很好. 用 command 当然就更差, 所以建议是安装软件 Azure Storage Explorer 微软出的安心用.

登入的话可以选择用 connection string 这样就不需要依赖 azure account 比较安全, connection string 藏在 access key 里面

有 2 个, 一个是备用. 所以用第一个, 第一个被偷了的话, 可以暂时换成 第 2 个, 然后 reset 第一个. 再换回来. 这样就不会有 down time.

它就像 windows 做 folder file 那样的体验.

有一个东西叫 Azure Storage Emulator,

打开 windows start 然后 search Azure Storage Emulator 点击打开. 如果没有找到的话就去 visual studio 安装

好像是只有 windows pro 版本才可以用, 因为它需要 Hyper-V

启动之后我们回到 Azure Storage Explorer 就可以操作了. 这样就不需要真的有 Azure account 了. 毕竟 Azure account 要钱丫.

这样就表示有了

一些 c# 的基本操作

安装 :

dotnet add package Azure.Storage.Blobs

dotnet add package Microsoft.Extensions.Azure (如果没有要用依赖注入的方式的话,这个可以不需要装)

startup.cs 搞注入, connection string 要放在 secret 哦

services.AddAzureClients(builder =>
{
  builder.AddBlobServiceClient(Configuration["AzureStorageConnectionString"]);
});

注入 service

private readonly BlobServiceClient _blobServiceClient;

public IndexModel(
BlobServiceClient blobServiceClient
)
{
_blobServiceClient = blobServiceClient;
}

基本的 CRUD

// create container
await _blobServiceClient.CreateBlobContainerAsync("container5", PublicAccessType.Blob); //get container
var containerClient = _blobServiceClient.GetBlobContainerClient("container5"); using var memoryStream = new MemoryStream();
var buffer = Encoding.UTF8.GetBytes("hello world");
await memoryStream.WriteAsync(buffer, 0, buffer.Length);
memoryStream.Seek(0, SeekOrigin.Begin); // create blob
var blobClient = containerClient.GetBlobClient("./folder1/upload.txt");
await blobClient.UploadAsync(memoryStream, overwrite: true); // 一定要 upload 先, 有了 blob 才可以 set access tier 哦
await blobClient.SetAccessTierAsync(AccessTier.Hot); memoryStream.SetLength(0); // clear stream
// download blob
await blobClient.DownloadToAsync(memoryStream);
memoryStream.Seek(0, SeekOrigin.Begin);
var value = Encoding.UTF8.GetString(memoryStream.ToArray()); // delete blob
await blobClient.DeleteAsync();
// delete container
await containerClient.DeleteAsync();

Asp.net Core 学习笔记 Azure Storage的更多相关文章

  1. Asp.net core 学习笔记 ( Azure key-vault )

    参考 : https://docs.microsoft.com/en-us/aspnet/core/security/key-vault-configuration?view=aspnetcore-2 ...

  2. 如何在ASP.NET Core中自定义Azure Storage File Provider

    文章标题:如何在ASP.NET Core中自定义Azure Storage File Provider 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p ...

  3. Asp.Net Core学习笔记:入门篇

    Asp.Net Core 学习 基于.Net Core 2.2版本的学习笔记. 常识 像Django那样自动检查代码更新,自动重载服务器(太方便了) dotnet watch run 托管设置 设置项 ...

  4. Asp.net core 学习笔记 ( Data protection )

    参考 : http://www.cnblogs.com/xishuai/p/aspnet-5-identity-part-one.html http://cnblogs.com/xishuai/p/a ...

  5. ASP.NET Core 学习笔记 第一篇 ASP.NET Core初探

    前言 因为工作原因博客断断续续更新,其实在很早以前就有想法做一套关于ASP.NET CORE整体学习度路线,整体来说国内的环境的.NET生态环境还是相对比较严峻的,但是干一行爱一行,还是希望更多人加入 ...

  6. ASP.NET Core 学习笔记 第四篇 ASP.NET Core 中的配置

    前言 说道配置文件,基本大多数软件为了扩展性.灵活性都会涉及到配置文件,比如之前常见的app.config和web.config.然后再说.NET Core,很多都发生了变化.总体的来说技术在进步,新 ...

  7. Asp.net core 学习笔记 ( identity server 4 JWT Part )

    更新 : id4 使用这个 DbContext 哦 dotnet ef migrations add identity-server-init --context PersistedGrantDbCo ...

  8. Asp.net Core学习笔记

    之前记在github上的,现在搬运过来 变化还是很大的,感觉和Nodejs有点类似,比如中间件的使用 ,努力学习ing... 优点 不依赖IIS 开源和跨平台 中间件支持 性能优化 无所不在的依赖注入 ...

  9. ASP.NET Core 学习笔记 第三篇 依赖注入框架的使用

    前言 首先感谢小可爱门的支持,写了这个系列的第二篇后,得到了好多人的鼓励,也更加坚定我把这个系列写完的决心,也能更好的督促自己的学习,分享自己的学习成果.还记得上篇文章中最后提及到,假如服务越来越多怎 ...

  10. ASP.NET Core 学习笔记 第五篇 ASP.NET Core 中的选项

    前言 还记得上一篇文章中所说的配置吗?本篇文章算是上一篇的延续吧.在 .NET Core 中读取配置文件大多数会为配置选项绑定一个POCO(Plain Old CLR Object)对象,并通过依赖注 ...

随机推荐

  1. js需要同时发起百条接口请求怎么办?--通过Promise实现分批处理接口请求

    如何通过 Promise 实现百条接口请求? 实际项目中遇到需要发起上百条Promise接口请求怎么办? 前言 不知你项目中有没有遇到过这样的情况,反正我的实际工作项目中真的遇到了这种玩意,一个接口获 ...

  2. [oeasy]python0016_编码_encode_编号_字节_计算机

    ​ 编码(encode) 回忆上次内容 上次找到了字符和字节状态之间的映射对应关系 字符对应着二进制字节 二进制字节也对应着字符 这种字节状态是用2位16进制数来表示的 hex(n)可以把数字转化为 ...

  3. selenium获取验证码截图

    获取验证码截图代码: 获取验证码代码: #!/user/bin/env python3 # -*- coding: utf-8 -*- import requests from selenium im ...

  4. PHP转Go系列 | 推荐一个强大的Go语言工具函数库

    大家好,我是码农先森. 从 PHP 转到 Go 的朋友,常常会因为没有便捷的工具函数而感到苦恼.PHP 写的多了就会形成路径依赖,在写 Go 的时候时不时就会想到 PHP 强大的数组函数.当然写 Go ...

  5. redis如何实现主从同步

    redis实现主从同步分为两种:全量同步和增量同步:第一次连入集群的slave需要进行全量同步,那些断开后重连的slave需要进行增量同步 每个redis都有自己的replid,他们是master的标 ...

  6. 百度翻译network里没有sug(文章发布时间2022年10月)

    百度翻译已经更新,现在的百度翻译分为两个阶段翻译,第一个阶段识别你的翻译字符是什么类型语言 第二阶段生成随机sign加携带token以post表单方式上传数据,返回json数据 尚硅谷在B站发布的的爬 ...

  7. 【Web】 通过浏览器打开本地应用程序

    首先需要编写注册表: 以Steam为例: "C:\Program Files (x86)\Steam\Steam.exe" 然后编写注册表: Windows Registry Ed ...

  8. 【OracleDB】 10 数据处理 DML

    DML(Data Manipulation Language – 数据操纵语言) - 向表中插入数据 - 修改现存数据 - 删除现存数据 [事务是由完成若干项工作的DML语句组成的] INSERT 语 ...

  9. 计算机硕博如何快速毕业 —— “你们都说白狐是妖孽,它明明是祥瑞。” —— 请评价一下MDPI旗下的期刊质量如何?

    MDPI是一个出版集团或者说是一个出版公司,其下辖多个开放期刊. 相关: https://www.zhihu.com/question/384813035/answer/1520065909 Sens ...

  10. 何时使用交叉熵,何时使用KL散度:计算分布差距为啥使用KL散度而不用交叉熵,计算预测差距时为啥使用交叉熵而不用KL散度

    问题: 何时使用交叉熵,何时使用KL散度? 计算分布差距为啥使用KL散度而不用交叉熵,计算预测差距时为啥使用交叉熵而不用KL散度 问题很大,答案却很简单. 答案: 熵是一种量度,是信息不确定性的量度: ...