Wwwroot/imgフォルダーに画像があり、サーバー側のコードで使用したい。
コードでこの画像へのパスを取得するにはどうすればよいですか?
コードは次のとおりです。
Graphics graphics = Graphics.FromImage(path)
IHostingEnvironment
を挿入し、そのWebRootPath
またはWebRootFileProvider
プロパティを使用する方がクリーンです。
たとえば、コントローラーで:
_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
}
_
ビューでは通常、Url.Content("images/foo.png")
を使用して、その特定のファイルのURLを取得します。ただし、何らかの理由で物理パスにアクセスする必要がある場合は、同じアプローチに従うことができます。
_@inject Microsoft.AspNetCore.Hosting.IHostingEnvironment env
@{
var path = env.WebRootFileProvider.GetFileInfo("images/foo.png")?.PhysicalPath
}
_
ダニエルの答えに基づいて構築されていますが、特に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");
}
}
IHostingEnvironmentの具体的なインスタンスがコントローラーに挿入され、それを使用してWebRootPath(wwwroot)にアクセスできます。
これは機能します:
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);
}