如何使用Microsoft.Azure.Storage.Blob从URL读取Blob内容?
通过SAS URL读取Azure Blob内容(基于Microsoft.Azure.Storage.Blob库)
核心实现思路
你使用的是旧版Microsoft.Azure.Storage.Blob SDK(包含CloudBlockBlob类),可以直接通过SAS URL实例化CloudBlockBlob对象,无需依赖容器或存储账户连接字符串,即可调用读取方法获取Blob内容。
代码示例
1. 直接读取文本内容(同步/异步)
针对你上传的application/fhir+ndjson文本格式Blob,可使用DownloadText或异步的DownloadTextAsync方法:
using Microsoft.Azure.Storage.Blob; // 替换为你的Blob SAS URL string blobSasUrl = "https://youraccount.blob.core.windows.net/yourcontainer/yourblob.ndjson?sv=2021-06-08&ss=bfqt&srt=sco&sp=rwdlacupiytfx&se=2024-12-31T23:59:59Z&st=2024-01-01T00:00:00Z&spr=https&sig=xxxxxx"; // 用SAS URL实例化CloudBlockBlob CloudBlockBlob blockBlob = new CloudBlockBlob(new Uri(blobSasUrl)); // 同步读取文本内容 string blobContent = blockBlob.DownloadText(); // 此处对blobContent做进一步处理(如解析NDJSON格式的FHIR资源) // 异步版本(推荐在异步方法中使用) // string blobContentAsync = await blockBlob.DownloadTextAsync();
2. 流式读取(适合大文件或逐行处理场景)
若Blob体积较大,流式读取更节省内存,尤其适合逐行处理FHIR NDJSON内容:
using Microsoft.Azure.Storage.Blob; using System.IO; string blobSasUrl = "你的Blob SAS URL"; CloudBlockBlob blockBlob = new CloudBlockBlob(new Uri(blobSasUrl)); // 打开流读取内容 using (Stream blobStream = blockBlob.OpenRead()) using (StreamReader reader = new StreamReader(blobStream)) { string line; while ((line = reader.ReadLine()) != null) { // 对单条FHIR资源JSON做业务处理 ProcessFhirResource(line); } } // 自定义FHIR资源处理方法示例 void ProcessFhirResource(string resourceJson) { // 此处编写你的业务逻辑,如反序列化为FHIR对象、校验等 }
注意事项
- 确保SAS URL包含读取权限(权限参数
sp需包含r,如sp=rwdl),否则会抛出权限不足异常。 - 使用异步方法时,需确保所在方法标记为
async并正确使用await。 - 若Blob为私有且无有效SAS权限,无法直接通过URL读取,需改用存储账户连接字符串或Azure AD身份验证方式。
内容的提问来源于stack exchange,提问作者Sri Reddy
相关产品推荐
相关产品推荐

