如何使用C#从Azure Blob Storage检索XML文件并返回XML格式文件
C# 从Azure Blob Storage检索并返回XML文件实现方案
你原有代码存在3个核心问题:
- 异步方法
DownloadTextAsync()未加await,直接调用ToString()只会获取到Task类的默认描述文本,拿不到实际XML内容 - 没有遍历传入的文件名列表,仅读取了单个固定Blob的内容
- 用空格拆分XML内容的操作完全破坏了XML结构,不符合返回XML格式文件的需求
修正后代码(返回XML原始内容集合)
如果需要获取所有指定XML文件的原始格式内容,使用如下实现:
using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.Azure.Storage; using Microsoft.Azure.Storage.Blob; // 注意异步方法需要修改返回值为Task包装的集合 public async Task<List<string>> GetXmlFiles(List<string> xmlNames) { string storageConnectionString = "你的存储连接字符串"; CloudStorageAccount storageAccount = CloudStorageAccount.Parse(storageConnectionString); CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); CloudBlobContainer container = blobClient.GetContainerReference("你的容器名称"); List<string> xmlFiles = new List<string>(); // 遍历所有传入的文件名逐个读取 foreach (var fileName in xmlNames) { CloudBlockBlob blob = container.GetBlockBlobReference(fileName); // 加await获取实际XML文本内容 string xmlContent = await blob.DownloadTextAsync(); xmlFiles.Add(xmlContent); } return xmlFiles; }
ASP.NET Core场景直接返回可下载XML文件
如果是在Web接口中需要返回XML文件供前端下载,可使用如下接口实现:
[HttpGet("download-xmls")] public async Task<IActionResult> DownloadXmlFiles([FromQuery] List<string> xmlNames) { string storageConnectionString = "你的存储连接字符串"; CloudStorageAccount storageAccount = CloudStorageAccount.Parse(storageConnectionString); CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); CloudBlobContainer container = blobClient.GetContainerReference("你的容器名称"); // 单文件返回示例,多文件可打包为zip返回 var firstFileName = xmlNames.FirstOrDefault(); if (string.IsNullOrEmpty(firstFileName)) return BadRequest("未指定文件名"); CloudBlockBlob blob = container.GetBlockBlobReference(firstFileName); Stream blobStream = await blob.OpenReadAsync(); // 设置正确的XML MIME类型 return File(blobStream, "application/xml", firstFileName); }
内容的提问来源于stack exchange,提问作者Kishore
相关产品推荐
相关产品推荐

