c# - 如何显示保存在 Asp.Net Core 应用程序的私有文件夹中的图像?
问题描述
内容根路径
我已将其更改ContentRootPath
为c:\images
如下。
public class Program
{
// others are removed for simplicity.
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseContentRoot(@"c:\images")
.UseStartup<Startup>();
}
中只有 JPEG 照片c:\images
。
控制器
使用 DI,我可以ContentRootPath
通过_env
如下方式访问。
public class HomeController : Controller
{
[HttpGet]
public IActionResult Index()
{
string crp = _env.ContentRootPath;
object[] filepaths = Directory.GetFiles(crp)
.Select(x=>Path.GetFileName(x))
.ToArray<string>();
return View(filepaths);
}
[HttpGet]
public FileStreamResult ViewImage(string filename)
{
string filepath = Path.Combine(_env.ContentRootPath, filename);
byte[] data = System.IO.File.ReadAllBytes(filepath);
Stream stream = new MemoryStream(data);
return new FileStreamResult(stream, "image/jpeg");
}
}
CSHTML
@model IList<object>
@foreach (var item in Model)
{
<img src="/Home/ViewImage/@item" />
}
问题和疑问
filename
总是null
。出了什么问题以及如何解决?
解决方案
由于您正在使用(可能)默认路由,因此您的最后一个路由参数是id
可选的。
为了使您的get
工作,您可以将图像源更改为具有命名参数的路由:
<img src="/Home/ViewImage?filename=@item" />
推荐阅读
- jenkins - 通过在 jenkins slave 中使用现货和按需实例来优化成本的最佳方法是什么?
- python - 如何通过调整大小来绑定事件
- php - 如果我忘记了codeigniter中的加密密钥,如何恢复密码
- c++builder - 你如何设置 TDirect2DCanvas.Pen.StrokeStyle?
- css - Tidio 实时聊天样式
- node.js - 护照中间件不运行
- magento2 - 在 Magento 2.4.2 中 Js 缩小站点采用错误的 js 路径后
- oracle - 即使我安装了 Oracle 也没有打开
- html - 响应式内容满足整个浏览器大小,而不是滚动条