将绝对文件路径转换为相对

时间:2016-08-05 10:16:49

标签: asp.net-core asp.net-core-mvc asp.net-core-1.0

我正在尝试从我的ASP.NET核心应用程序的wwwroot文件夹中的images文件夹中提供文件,我已经在Startup类中启用了静态文件访问。

HostingEnvironment服务为我提供了WebRootPath属性,为我提供了wwwroot文件夹的绝对路径,但使用此路径在浏览器中给出了“不允许加载本地资源”错误控制台。

如果我使用localhost +我的浏览器访问该文件,我可以获取图像文件,因此没有授权问题。

我现在需要的是能够将该绝对路径转换为我的Web服务器的相对路径。

2 个答案:

答案 0 :(得分:6)

鉴于您遇到的错误,在我看来您尝试在视图中使用_env.WebRootPath + "/images/textfile.txt",例如作为href属性。

  • 这样做最终会在浏览器中尝试从您的网页请求一个类似file:///C:/Users/PathToYourSite/wwwroot/images/textfile.txt的网址,该网址以您遇到的错误结束。您可以详细了解该on this answer,但在moder Chrome等浏览器中,默认情况下会禁用从http协议到文件协议的请求。

因此,当您想要将文件内容作为服务器端逻辑的一部分进行读取时,应使用IHostingEnvironment方法,以便您可以对它们执行某些操作。

但是,如果您需要在wwwroot中生成指向文件的链接并在视图中使用它们,那么您有以下几种选择:

  • 使用IUrlHelper将公共网址解析为wwwroot中的文件,其中"~/"是wwwroot文件夹。然后在需要时使用它,如href:

    @Url.Content("~/images/textfile.txt")
    
  • 使用以"~/"开头的href属性直接在剃刀视图中创建锚点。 (你甚至可以在那里获得智能感知)

    <a href="~/images/textfile.txt">Get file from wwwroot</a>
    

答案 1 :(得分:5)

要在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内的文件的所有内容

希望有所帮助