Get image from wwwroot/images in ASP.Net Core

2020-06-04 02:51发布

I have an image in wwwroot/img folder and want to use it in my server side code.

How can I get the path to this image in code?

The code is like this:

Graphics graphics = Graphics.FromImage(path)

4条回答
\"骚年 ilove
2楼-- · 2020-06-04 03:20

Building on Daniel's answer, but specifically for ASP.Net Core 2.2:

Use dependency injection in your controller:

[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");
    }
}

A concrete instance of the IHostingEnvironment is injected into your controller, and you can use it to access WebRootPath (wwwroot).

查看更多
孤傲高冷的网名
3楼-- · 2020-06-04 03:38

It would be cleaner to inject an IHostingEnvironment and then either use its WebRootPath or WebRootFileProvider properties.

For example in a controller:

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
}

In a view you typically want to use Url.Content("images/foo.png") to get the url for that particular file. However if you need to access the physical path for some reason then you could follow the same approach:

@inject Microsoft.AspNetCore.Hosting.IHostingEnvironment env
@{ 
 var path = env.WebRootFileProvider.GetFileInfo("images/foo.png")?.PhysicalPath
}
查看更多
【Aperson】
4楼-- · 2020-06-04 03:40
 string path =  $"{Directory.GetCurrentDirectory()}{@"\wwwroot\images"}";
查看更多
ら.Afraid
5楼-- · 2020-06-04 03:44

This works:

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

public IActionResult About()
{
    var stream = env.WebRootFileProvider.GetFileInfo("image/foo.png").CreateReadStream();
    System.Drawing.Image image = System.Drawing.Image.FromStream(stream);
    Graphics graphics = Graphics.FromImage(image);
}
查看更多
登录 后发表回答