首页 > 解决方案 > 如何显示保存在 Asp.Net Core 应用程序的私有文件夹中的图像?

问题描述

内容根路径

我已将其更改ContentRootPathc:\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。出了什么问题以及如何解决?

标签: c#asp.net-core

解决方案


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

为了使您的get工作,您可以将图像源更改为具有命名参数的路由:

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

推荐阅读