如何显示保存在Asp.Net Core应用程序的私人文件夹中的图像?

时间:2018-06-04 18:47:19

标签: c# asp.net-core

ContentRootPath

我已将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>();
}

c:\images中只有JPEG照片。

控制器

使用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。有什么问题以及如何解决?

1 个答案:

答案 0 :(得分:1)

由于您使用(大概)默认路由,因此您的上一个路由参数为id并且是可选的。

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

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