从 ASP.Net Core 中的 wwwroot/images 获取图像
Posted
技术标签:
【中文标题】从 ASP.Net Core 中的 wwwroot/images 获取图像【英文标题】:Get image from wwwroot/images in ASP.Net Core 【发布时间】:2017-07-24 01:38:11 【问题描述】:我在 wwwroot/img 文件夹中有一个图像,并想在我的服务器端代码中使用它。
如何在代码中获取此图像的路径?
代码是这样的:
Graphics graphics = Graphics.FromImage(path)
【问题讨论】:
【参考方案1】:仅供参考。只是对此的更新。在 ASP.NET Core 3 和 Net 5 中如下:
private readonly IWebHostEnvironment _env;
public HomeController(IWebHostEnvironment env)
_env = env;
public IActionResult About()
var path = _env.WebRootPath;
【讨论】:
【参考方案2】:这行得通:
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);
【讨论】:
你应该使用 (var stream = env.WebRootFileProvider.GetFileInfo("image/foo.png").CreateReadStream()) IHostingEnvironment 已过时【参考方案3】:以 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");
IHostingEnvironment 的具体实例被注入到您的控制器中,您可以使用它来访问 WebRootPath (wwwroot)。
【讨论】:
【参考方案4】:注入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
【讨论】:
使用新版本的 .NET IHostingEnvironment 已弃用并由 IWebHostEnvironment 代替,但此处的代码看起来相同并且工作相同:)【参考方案5】: string path = $"Directory.GetCurrentDirectory()@"\wwwroot\images"";
【讨论】:
如果您从不同的文件夹提供静态文件,这将不起作用。更糟糕的是,Directory.GetCurrentDirectory
在部署到 IIS 等服务器时可能会not return what you expect。
这在 Azure 上也会失败。以上是关于从 ASP.Net Core 中的 wwwroot/images 获取图像的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Core 中 wwwroot 的文件夹类型并在 MVC 5 中使用
有没有办法为 ASP.NET Core 中的内容设置通用根路径?