从ASP.Net Core中的wwwroot / images获取图像

Tec*_*chy 4 asp.net-core-mvc asp.net-core asp.net-core-webapi

我在wwwroot / img文件夹中有一个图像,想在服务器端代码中使用它。

如何在代码中获取此图像的路径?

代码是这样的:

Graphics graphics = Graphics.FromImage(path)
Run Code Online (Sandbox Code Playgroud)

Dan*_*.G. 13

注入IHostingEnvironment,然后使用WebRootPathWebRootFileProvider属性会更清洁。

例如在控制器中:

private readonly IHostingEnvironment env;
public HomeController(IHostingEnvironment env)
{
    this.env = env;
}

public IActionResult About(Guid foo)
{
    var path = env.WebRootFileProvider.GetFileInfo("images/foo.png")?.PhysicalPath
}
Run Code Online (Sandbox Code Playgroud)

在视图中,您通常希望用于Url.Content("images/foo.png")获取该特定文件的url。但是,如果由于某种原因需要访问物理路径,则可以采用相同的方法:

@inject Microsoft.AspNetCore.Hosting.IHostingEnvironment env
@{ 
 var path = env.WebRootFileProvider.GetFileInfo("images/foo.png")?.PhysicalPath
}
Run Code Online (Sandbox Code Playgroud)

  • 在新版本的 .NET 中,IHostingEnvironment 已被弃用并被 IWebHostEnvironment 取代,但此处的代码看起来相同并且工作方式相同:) (4认同)

Sco*_*son 6

基于 Daniel 的答案,但专门针对 ASP.Net Core 2.2:

在控制器中使用依赖注入:

[Route("api/[controller]")]
public class GalleryController : Controller
{
    private readonly IHostingEnvironment _hostingEnvironment;
    public GalleryController(IHostingEnvironment hostingEnvironment)
    {
        _hostingEnvironment = hostingEnvironment;
    }        

    // GET api/<controller>/5
    [HttpGet("{id}")]
    public IActionResult Get(int id)
    {
        var path = Path.Combine(_hostingEnvironment.WebRootPath, "images", $"{id}.jpg");
        var imageFileStream = System.IO.File.OpenRead(path);
        return File(imageFileStream, "image/jpeg");
    }
}
Run Code Online (Sandbox Code Playgroud)

IHostingEnvironment 的具体实例被注入到您的控制器中,您可以使用它来访问 WebRootPath (wwwroot)。


Les*_*s P 5

仅供参考。只是对此进行更新。在 ASP.NET Core 3 和 Net 5 中,内容如下:

    private readonly IWebHostEnvironment _env;

    public HomeController(IWebHostEnvironment env)
    {
        _env = env;

    }

    public IActionResult About()
    {
      var path = _env.WebRootPath;
    }
Run Code Online (Sandbox Code Playgroud)


rav*_*dra -7

 string path =  $"{Directory.GetCurrentDirectory()}{@"\wwwroot\images"}";
Run Code Online (Sandbox Code Playgroud)

  • 如果您从不同的文件夹提供静态文件,这将不起作用。更糟糕的是,当部署到 IIS 这样的服务器时,“Directory.GetCurrentDirectory”可能[不会返回您期望的结果](http://stackoverflow.com/questions/10951599/getting-current-directory-in-net-web-application) 。 (4认同)