Asp.net Core 学习笔记 Azure Storage
更新: 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的更多相关文章
- Asp.net core 学习笔记 ( Azure key-vault )
参考 : https://docs.microsoft.com/en-us/aspnet/core/security/key-vault-configuration?view=aspnetcore-2 ...
- 如何在ASP.NET Core中自定义Azure Storage File Provider
文章标题:如何在ASP.NET Core中自定义Azure Storage File Provider 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p ...
- Asp.Net Core学习笔记:入门篇
Asp.Net Core 学习 基于.Net Core 2.2版本的学习笔记. 常识 像Django那样自动检查代码更新,自动重载服务器(太方便了) dotnet watch run 托管设置 设置项 ...
- Asp.net core 学习笔记 ( Data protection )
参考 : http://www.cnblogs.com/xishuai/p/aspnet-5-identity-part-one.html http://cnblogs.com/xishuai/p/a ...
- ASP.NET Core 学习笔记 第一篇 ASP.NET Core初探
前言 因为工作原因博客断断续续更新,其实在很早以前就有想法做一套关于ASP.NET CORE整体学习度路线,整体来说国内的环境的.NET生态环境还是相对比较严峻的,但是干一行爱一行,还是希望更多人加入 ...
- ASP.NET Core 学习笔记 第四篇 ASP.NET Core 中的配置
前言 说道配置文件,基本大多数软件为了扩展性.灵活性都会涉及到配置文件,比如之前常见的app.config和web.config.然后再说.NET Core,很多都发生了变化.总体的来说技术在进步,新 ...
- Asp.net core 学习笔记 ( identity server 4 JWT Part )
更新 : id4 使用这个 DbContext 哦 dotnet ef migrations add identity-server-init --context PersistedGrantDbCo ...
- Asp.net Core学习笔记
之前记在github上的,现在搬运过来 变化还是很大的,感觉和Nodejs有点类似,比如中间件的使用 ,努力学习ing... 优点 不依赖IIS 开源和跨平台 中间件支持 性能优化 无所不在的依赖注入 ...
- ASP.NET Core 学习笔记 第三篇 依赖注入框架的使用
前言 首先感谢小可爱门的支持,写了这个系列的第二篇后,得到了好多人的鼓励,也更加坚定我把这个系列写完的决心,也能更好的督促自己的学习,分享自己的学习成果.还记得上篇文章中最后提及到,假如服务越来越多怎 ...
- ASP.NET Core 学习笔记 第五篇 ASP.NET Core 中的选项
前言 还记得上一篇文章中所说的配置吗?本篇文章算是上一篇的延续吧.在 .NET Core 中读取配置文件大多数会为配置选项绑定一个POCO(Plain Old CLR Object)对象,并通过依赖注 ...
随机推荐
- Profibus_DP转ModbusTCP网关模块接马保通讯案例
某工业企业为了提高生产效率和管理水平,决定对其生产线进行智能化改造.在该项目中,利用巴图自动化Profibus_DP转ModbusTCP网关模块(BT-ETHPB20)连接了不同生产设备,实现了设备之 ...
- oeasy教您玩转linux 010211 牛说 cowsay
我们来回顾一下 上一部分我们都讲了什么? 软件包工具是 apt 软件包不但能下载,也能升级,还能删除 专门管理软件包的 aptitude 这次我们下载个牛说 cowsay: sudo apt inst ...
- oeasy教您玩转vim - 71 - # 视图view
视图view 回忆上次折叠的细节 折叠方式很多 我们一般就用默认的就行 indent 很好用 前提是缩进语法严格到位 这样语法和排版都能同时确保 打开关闭 zc.zo 是打开关闭当前行 zm.zr ...
- CSS:弹性布局(display:flex)
道友请了~ 最近小道在修练主修功法<嘉蛙>之余,偶然从一名散修手中得到了一本<CSS秘籍>,刚好近期有自己做微信小程序的打算,这不是瞌睡了给递枕头么.欣喜若狂,翻开第一章,拜读 ...
- LLM并行训练6-激活优化
前置知识 Activation 激活指的是一些在fp时计算得到的临时tensor, 会用于bp时的计算. 如果能在fp计算后把临时tensor缓存下来就可以加速bp, 缺点在于某些激活会占用大量显存. ...
- JAVA Spring Boot快速开始
实践环境 Spring Boot 3.2.1 Maven 3.8.8 JDK 1.8.0_331 创建项目 通过http://start.spring.io/网站创建包含Spring Boot的项目, ...
- 初学者使用1Panel面板快速搭建WordPress网站
之前介绍了宝塔面板以及如何搭建wordpress网站,这篇文章我们来学习如何使用1Panel面板搭建wordpress网站. 一.1Panel面板介绍 1. 介绍 1Panel 是一个现代化.开源的基 ...
- 神经网络之卷积篇:详解计算机视觉(Computer vision)
详解计算机视觉 计算机视觉是一个飞速发展的一个领域,这多亏了深度学习.深度学习与计算机视觉可以帮助汽车,查明周围的行人和汽车,并帮助汽车避开它们.还使得人脸识别技术变得更加效率和精准,即将能够体验到或 ...
- 【Java】Springboot 响应外切 实现数据脱敏
实现效果: 1.脱敏注解在模型类进行标记 package cn.cloud9.server.test.model; import cn.cloud9.server.struct.masking.ann ...
- 人工智能(AI)未来之方向:努力培养人才、科研创新!
地址: https://baijiahao.baidu.com/s?id=1801824912676717630&wfr=spider&for=pc 人工智能(AI)未来之方向 1. ...