将绝对文件路径转换为相对路径
Convert absolute file path to relative
我正在尝试从我的 ASP.NET 核心应用程序的 wwwroot 文件夹中的图像文件夹中提供文件,我已经在 Startup
class 中启用了静态文件访问。
HostingEnvironment
服务为我提供了一个 WebRootPath
属性,它为我提供了 wwwroot 文件夹的绝对路径,但是使用这个路径给我一个 "Not Allowed to load local resource" 错误在我的浏览器控制台中。
如果我使用 localhost
+ 相对路径从我的浏览器访问文件,我可以获得图像文件,因此没有授权问题。
我现在需要的是能够将该绝对路径转换为我的 Web 服务器的相对路径。
为了访问 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
中的文件的所有内容
希望对您有所帮助
鉴于您遇到的错误,在我看来您正试图在您的视图中使用 _env.WebRootPath + "/images/textfile.txt"
,例如作为 href 属性。
- 这样做最终会导致浏览器尝试从您的页面请求一个看起来像
file:///C:/Users/PathToYourSite/wwwroot/images/textfile.txt
的 url,这将导致您遇到错误。您可以阅读更多有关 on this answer 的信息,但在像 moder Chrome 这样的浏览器中,默认情况下禁用从 http 协议到文件协议的请求。
因此,当您想要读取文件内容作为服务器端逻辑的一部分时,应该使用 IHostingEnvironment
方法,这样您就可以对它们做一些事情。
但是,如果您需要在 wwwroot 中生成指向您的文件的链接并在您的视图中使用它们,您有几个选择:
使用IUrlHelper
将publicurl解析为wwwroot中的一个文件,其中"~/"
是wwwroot文件夹。然后在需要时使用它,例如 href:
@Url.Content("~/images/textfile.txt")
直接在 razor 视图中创建一个 href 属性以 "~/"
开头的锚点。 (你甚至可以在那里获得智能感知)
<a href="~/images/textfile.txt">Get file from wwwroot</a>
这适用于较新版本的 .NET
public class TestController{
private readonly string _rootPath;
public TestController(IWebHostEnvironment env)
{
_rootPath = env.WebRootPath;
}
}
我正在尝试从我的 ASP.NET 核心应用程序的 wwwroot 文件夹中的图像文件夹中提供文件,我已经在 Startup
class 中启用了静态文件访问。
HostingEnvironment
服务为我提供了一个 WebRootPath
属性,它为我提供了 wwwroot 文件夹的绝对路径,但是使用这个路径给我一个 "Not Allowed to load local resource" 错误在我的浏览器控制台中。
如果我使用 localhost
+ 相对路径从我的浏览器访问文件,我可以获得图像文件,因此没有授权问题。
我现在需要的是能够将该绝对路径转换为我的 Web 服务器的相对路径。
为了访问 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
中的文件的所有内容希望对您有所帮助
鉴于您遇到的错误,在我看来您正试图在您的视图中使用 _env.WebRootPath + "/images/textfile.txt"
,例如作为 href 属性。
- 这样做最终会导致浏览器尝试从您的页面请求一个看起来像
file:///C:/Users/PathToYourSite/wwwroot/images/textfile.txt
的 url,这将导致您遇到错误。您可以阅读更多有关 on this answer 的信息,但在像 moder Chrome 这样的浏览器中,默认情况下禁用从 http 协议到文件协议的请求。
因此,当您想要读取文件内容作为服务器端逻辑的一部分时,应该使用 IHostingEnvironment
方法,这样您就可以对它们做一些事情。
但是,如果您需要在 wwwroot 中生成指向您的文件的链接并在您的视图中使用它们,您有几个选择:
使用
IUrlHelper
将publicurl解析为wwwroot中的一个文件,其中"~/"
是wwwroot文件夹。然后在需要时使用它,例如 href:@Url.Content("~/images/textfile.txt")
直接在 razor 视图中创建一个 href 属性以
"~/"
开头的锚点。 (你甚至可以在那里获得智能感知)<a href="~/images/textfile.txt">Get file from wwwroot</a>
这适用于较新版本的 .NET
public class TestController{
private readonly string _rootPath;
public TestController(IWebHostEnvironment env)
{
_rootPath = env.WebRootPath;
}
}