将绝对文件路径转换为相对的
问题描述:
我试图从我的ASP.NET Core应用程序的wwwroot文件夹内我的images文件夹中提供文件,其中我已经在Startup
类中启用了静态文件访问。将绝对文件路径转换为相对的
HostingEnvironment
服务为我提供了一个WebRootPath
属性,它为我提供了wwwroot文件夹的绝对路径,但是使用此路径在我的浏览器控制台中给我一个“不允许加载本地资源”的错误。
如果我从我的浏览器使用localhost
+相对路径访问文件,我可以获取映像文件,因此不存在授权问题。
我现在需要的是能够将该绝对路径转换为我的Web服务器的相对路径。
答
鉴于您遇到的错误,在我看来,您正尝试在您的视图中使用_env.WebRootPath + "/images/textfile.txt"
,例如作为href属性。
- 否则将在浏览器中结束试图从你的页面请求的URL看起来像
file:///C:/Users/PathToYourSite/wwwroot/images/textfile.txt
,在您遇到的错误,结束。您可以阅读关于on this answer的更多信息,但在Chrome等浏览器中,默认情况下,http协议对文件协议的请求被禁用。
所以,当你想读取文件的内容,作为您的服务器端逻辑的一部分IHostingEnvironment
的方法应该是使用,所以你可以做一些与他们。
不过,如果你需要的是生成链接到您的文件中的wwwroot和你的意见使用它们,你有两个选择:
-
使用
IUrlHelper
解决市民url到wwwroot里面的文件,其中"~/"
是wwwroot文件夹。@Url.Content("~/images/textfile.txt")
-
直接创建一个Razor视图的锚与开始
"~/"
href属性:那么当你需要它,像一个href使用它。 (你甚至可以智能感知存在)<a href="~/images/textfile.txt">Get file from wwwroot</a>
答
为了访问文件wwwroot中,注入IHostingEnvironment
到你的控制器构造:
private IHostingEnvironment _env;
public HomeController(IHostingEnvironment env)
{
_env = env;
}
更新您的控制器读取WebRootPath
属性和相对文件路径追加到它
var content = System.IO.File.ReadAllText(_env.WebRootPath + "/images/textfile.txt");
这将读取位于/wwwroot/images/textfile.txt内的文件的所有内容。
希望可以帮助
请,不要的东西标记为问题的标题! – Tseng