Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get image from wwwroot/images in ASP.Net Core

Tags:

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) 
like image 594
Techy Avatar asked Mar 03 '17 19:03

Techy


People also ask

What is wwwroot folder in .NET Core?

By default, the wwwroot folder in the ASP.NET Core project is treated as a web root folder. Static files can be stored in any folder under the web root and accessed with a relative path to that root.

What is Wwwroot folder?

wwwroot is a Virtual Directory of IIS server. The IIS server Runs the web-site deployed on the directory.

Where can I find wwwroot folder?

Typically, the default Web application root for port 80 is stored at c:\inetpub\wwwroot.


2 Answers

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).

like image 33
Scott Ferguson Avatar answered Sep 22 '22 10:09

Scott Ferguson


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 } 
like image 198
Daniel J.G. Avatar answered Sep 21 '22 10:09

Daniel J.G.