【问题标题】:Download files with absolute path outside of wwwroot with Razor Page使用 Razor 页面下载具有 wwwroot 之外的绝对路径的文件
【发布时间】:2022-11-04 04:14:08
【问题描述】:
我们正在构建一个 Razor Page WebApp,我们需要我们的用户能够下载存储在我们服务器上的文件。
文件路径如下所示
//server_name/Databases/PDF_Files/2022-01-01-Invoice.pdf
所有文件都在我们的服务器上。当我将路径放在浏览器中时,我可以在浏览器中查看它。
有了可用的绝对路径,实现这一点的最佳方法是什么?
一个简单的代码 sn-p 将不胜感激。
【问题讨论】:
标签:
c#
razor-pages
absolute-path
downloadfileasync
【解决方案1】:
您可以使用File.ReadAllBytes 获取字节数组,然后将其作为FileResult 返回:
public async Task<FileResult> OnGetFile(string filename)
{
var path = @"\server_nameDatabasesPDF_Files";
var file = Path.Combine(path, filename);
return File(await File.ReadAllBytesAsync(file), "application/pdf", filename);
}
上面named handler method 的 URL 需要包含一个查询字符串,该字符串具有处理程序名称(“文件”)和文件名,例如:
?handler=file&filename=2022-01-01-Invoice.pdf
显然,您将需要验证文件名以确保它存在并且不会尝试访问服务器上的其他目录,并且您将需要确保运行 Web 应用程序进程的帐户具有足够的权限来访问网络资源。