gpt4 book ai didi

c# - excel 文件托管在 Azure Blob 上,如何将其读入 FileStream?

转载 作者:行者123 更新时间:2023-12-03 04:44:46 30 4
gpt4 key购买 nike

我使用 C# 将文件上传到 Azure Blob。现在我想使用 ExcelDataReader 读取上传的文件。

我正在使用下面的代码。其中 _imageRootPathNos 是保存文件的路径 ( http://imor.blob.core.windows.net/files )

FileStream stream = System.IO.File.Open(_imageRootPathNos + "/" + "ImEx.xlsx", FileMode.Open, FileAccess.Read);

我收到错误 System.ArgumentException:“不支持 URI 格式。”

我错过了什么?

最佳答案

ExcelDataReader 可以从任何流中读取数据,而不仅仅是 FileStream。您可以使用 WebClient(已过时)、HttpClient 或 Azure SDK 打开流并读取 blob。

无论如何,读取或下载 blob 都会打开并读取流。而不是例如。下载 blob 或读取缓冲区中的所有内容时,您可以直接访问流。无论您使用哪种技术,最终都会通过单个 URL 打开一个流来进行读取。

对于您的情况,您可以下载并保留文件以重复使用,也可以直接从流中读取。如果您没有写入磁盘文件的权限,或者您同时处理许多请求并且不想处理临时文件存储,您可能需要在 Web 应用程序中执行此操作。

使用HttpClient,您可以使用GetStreamAsync打开流的方法:

var client=new HttpClient();
client.BaseAddress = new Uri("https://imor.blob.core.windows.net/files");
// Set headers and credentials
// ...
using(var stream=await client.GetStreamAsync("ImEx.xlsx"))
{
var excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
//Process the data
}

通过 Azure SDK,您可以使用CloudBlob.OpenRead方法:

var blob = container.GetBlockBlobReference("Imex.xlsx");
using(var stream=await blob.OpenReadAsync())
{
var excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
//Process the data
}

您可能希望将数据存储在内存缓冲区或文件中,例如用于缓存或重新处理。为此,您可以分别创建 MemoryStream 或 FileStream,并将数据从 blob 流复制到目标流。

使用 HttpClient,您可以使用以下内容填充内存缓冲区:

//To avoid reallocations, create a buffer large enough to hold the file

using(var memStream=new MemoryStream(65536))
{
using(var stream=await client.GetStreamAsync("ImEx.xlsx"))
{
await stream.CopyToAsync(memStream);
}
memStream.Position=0;
var excelReader = ExcelReaderFactory.CreateOpenXmlReader(memStream);
}

使用 SDK:

using(var memStream=new MemoryStream(65536)) 
{
//.....
var blob = container.GetBlockBlobReference("Imex.xlsx");
await stream.DownloadToStreamAsync(memStream);
memStream.Position=0;
var excelReader = ExcelReaderFactory.CreateOpenXmlReader(memStream);
//...
}

要下载文件,您可以将 MemoryStream 替换为 FileStream。

关于c# - excel 文件托管在 Azure Blob 上,如何将其读入 FileStream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43840432/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com