0

0

C# 操作Azure Blob存储方法 C#如何上传和下载文件到Blob

畫卷琴夢

畫卷琴夢

发布时间:2026-03-03 11:05:02

|

987人浏览过

|

来源于php中文网

原创

azure.storage.blobs上传最简路径是blobclient.uploadasync(),支持自动分块、重试和md5校验;需确保容器存在、权限正确(如sas含w)、容器名全小写合规。

c# 操作azure blob存储方法 c#如何上传和下载文件到blob

Azure.Storage.Blobs 上传文件最简路径

新版 SDK(v12+)已弃用旧的 Microsoft.Azure.Storage.Blob,必须用 Azure.Storage.Blobs。上传核心是 BlobClient.UploadAsync(),它会自动处理分块、重试和 MD5 校验(默认关闭)。

常见错误:AuthenticationFailed 多因连接字符串过期或 SAS token 权限不足(缺 w 权限);ResourceNotFound 常因容器名未提前创建或大小写不匹配(容器名全小写)。

  • 确保容器存在:调用 blobServiceClient.GetBlobContainerClient("mycontainer").CreateIfNotExistsAsync()
  • 上传本地文件:await blobClient.UploadAsync("path/to/file.txt", new BinaryData(File.ReadAllBytes("file.txt")))
  • 流式上传更省内存:using var stream = File.OpenRead("file.txt"); await blobClient.UploadAsync(stream);
  • 若需设置 ContentType,传 BlobHttpHeadersnew BlobHttpHeaders { ContentType = "text/plain" }

下载 Blob 文件到本地的三种方式

下载本质是读取 BlobClient 的内容流,关键在是否需要完整加载到内存。大文件务必用流式,否则可能 OOM。

MyMap AI
MyMap AI

使用AI将想法转化为图表

下载
  • 直接下载为字节数组(仅适合小文件):var response = await blobClient.DownloadContentAsync(); byte[] data = response.Value.Content.ToArray();
  • 流式保存到磁盘(推荐):using var downloadStream = await blobClient.OpenReadAsync(); using var fileStream = File.Create("downloaded.txt"); await downloadStream.CopyToAsync(fileStream);
  • 带进度回调的下载(需手动分块):用 DownloadToAsync(Stream, Progress<long>, CancellationToken)</long>Progress<long></long> 回调参数是已读字节数

BlobClient 初始化时连接字符串 vs. SAS token vs. Azure AD

初始化 BlobClient 的方式直接影响权限模型和适用场景:

  • 连接字符串:开发调试最快,但含密钥,禁止提交到代码或 Git;格式为 DefaultEndpointsProtocol=https;AccountName=xxx;AccountKey=yyy==;EndpointSuffix=core.windows.net
  • SAS token:适合临时授权,URL 中拼接 ?sv=...&st=...&se=...&sr=c&sp=rw&sig=...,注意 sr=c 表示容器级,sp=rw 含读写权限
  • Azure AD(推荐生产):需给应用注册分配 Storage Blob Data Contributor 角色,用 new DefaultAzureCredential() 自动链式获取 token,无需硬编码凭据

上传下载失败时最该检查的三件事

90% 的问题集中在配置、网络和权限层面,而不是代码逻辑本身。

  • 确认存储账户防火墙设置:若开启“选中网络”,需添加客户端 IP 或允许 Azure 服务访问
  • 检查 DNS 解析:ping <accountname>.blob.core.windows.net</accountname> 是否通;国内环境有时需配 https://<accountname>.blob.core.chinacloudapi.cn</accountname>(Azure China)
  • 验证时间同步:SDK 对签名时间敏感,本地系统时间误差超 15 分钟会导致 AuthenticationFailed
实际项目里最容易被忽略的是容器名的隐式规则——它必须全小写、不能含下划线、长度 3–63 字符,且一旦创建无法重命名。上传前用 Regex.IsMatch(containerName, @"^[a-z0-9]([a-z0-9\-]{1,61}[a-z0-9])?$") 校验能省去很多排查时间。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

6490

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

839

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

1088

2023.12.21

token什么意思
token什么意思

token是一种用于表示用户权限、记录交易信息、支付虚拟货币的数字货币。可以用来在特定的网络上进行交易,用来购买或出售特定的虚拟货币,也可以用来支付特定的服务费用。想了解更多token什么意思的相关内容可以访问本专题下面的文章。

1795

2024.03.01

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

678

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

219

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1561

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

645

2023.11.24

C++高性能网络编程与Reactor模型实践
C++高性能网络编程与Reactor模型实践

本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

0

2026.03.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 10.6万人学习

C 教程
C 教程

共75课时 | 5.1万人学习

C++教程
C++教程

共115课时 | 20.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号