在Azure中托管的ASP.NET Core中读取Excel文件
在Azure中托管的ASP.NET Core中读取Excel文件
我有一个端点,应该从Excel文件中返回一个值。
在本地主机上,通过使用以下代码启用UseStaticFiles
中间件,并将Excel文件添加到Resources
文件夹中来实现:
app.UseStaticFiles(new StaticFileOptions { FileProvider = new PhysicalFileProvider( Path.Combine(env.ContentRootPath, "Resources")), RequestPath = "/Resources" });
然而,当我将其发布到Azure托管时,它显示以下错误,我无法访问我的应用程序和Excel文件。
在我移除UseStaticFiles
中间件之后,应用程序可以正常工作,只是缺少了Excel文件。
那么我应该如何在Azure环境中发布和访问这个文件呢?
问题的出现原因:需要在ASP.NET Core中的Azure中托管的项目中读取Excel文件。
解决方法:通过组合“Clean Windows Azure Website”和“Accessing wwwroot folder”两个解决方案来解决。不需要中间件,只需使用IWebHostEnvironment服务就可以访问所需的Excel文件,该文件现在位于项目中的wwwroot/Resources/目录中。
以下是解决方法的代码示例:
private readonly IWebHostEnvironment _env; public ProjectService(IWebHostEnvironment env) { _env = env; } public double GetExcelValue() { string excelFilePath = Path.Combine(_env.WebRootPath, "Resources/file.xlsx"); (...) }
以上方法可以通过IWebHostEnvironment服务获取项目中wwwroot/Resources/目录下的Excel文件路径。
问题的原因:在ASP.NET Core中托管在Azure中时,无法直接从特定单元格返回Excel文件中的值。
解决方法:如果需要提供静态文件,可以将文件放在Azure存储中,并使用所需的公共访问级别。如果需要从Excel文件中读取,可以使用不需要Interop的方式,因为在App Service上没有可用的Excel。一种选择是使用OpenXML XML SDK,该SDK构建在System.IO.Packaging API上,并提供强类型类来操作符合Office Open XML文件格式规范的文档。另一种选择是使用开源解决方案ClosedXML,它是OpenXML的包装器,使得与其一起工作更加容易。
问题在于在应用程序托管在Azure时访问Excel文件。我将尝试使用Azure存储,谢谢!