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

问题描述:

我试图从我的ASP.NET Core应用程序的wwwroot文件夹内我的images文件夹中提供文件,其中我已经在Startup类中启用了静态文件访问。将绝对文件路径转换为相对的

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

如果我从我的浏览器使用localhost +相对路径访问文件,我可以获取映像文件,因此不存在授权问题。

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

+0

请,不要的东西标记为问题的标题! – Tseng

鉴于您遇到的错误,在我看来,您正尝试在您的视图中使用_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内的文件的所有内容。

希望可以帮助