代码之家  ›  专栏  ›  技术社区  ›  Intellectual Gymnastics Lover

如何显示保存在ASP.NET核心应用程序的私人文件夹中的图像?

  •  1
  • Intellectual Gymnastics Lover  · 技术社区  · 6 年前

    内容根路径

    我已经换了 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:图像 .

    控制器

    使用DI,我可以访问 内容根路径 通过 _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 . 怎么了,怎么解决?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Stefan    6 年前

    由于您正在使用(可能)默认路由,最后一个路由参数是 id 而且是可选的。

    使你 get 工作时,可以使用命名参数将图像源更改为路由:

    <img src="/Home/ViewImage?filename=@item" />