如何使用FileContentResult从字节数组中显示图像?

时间:2016-04-04 08:37:46

标签: c# asp.net-mvc charts bytearray system.web

所以我想说我正在制作一些图表:

控制器:

    foreach (var m in model[0].HistoryValues)
    {

        var chart = new Chart(width: 700, height: 600)
        .AddSeries(
        name: m.LastUpdateSTR,
        chartType: "bar",
        xValue: new[] { "Server", "Db", "Tickets" },
        yValues: new[] { m.ServerPerformance, m.Databaseperformance, m.SoldTicketsLastUpdate })
        .GetBytes("jpg");

        m.Bytes = chart;

    };

现在我想在我的视图中将这些图表显示为图像:

@foreach (var t in Model[0].HistoryValues)
{
    <img src="@CalculationHandler.getImage(t.Bytes)" alt="Chart Image" />
}

getImage方法:

public static FileContentResult getImage(byte[] bytes)
{
    return new FileContentResult(bytes, "image/jpg");
}

结果:

enter image description here

其他尝试:

这给了我一个serverError,遗憾的是我不知道为什么因为我在执行此操作时无法调试getImage方法。

@foreach (var t in Model[0].HistoryValues)
{
    <img src="@Url.Action("getImage", "OverWatch", new { Mybytes= t.Bytes })" alt="Chart Image" />
}

这给了我与本文第一段代码相同的结果,但我又无法调试getImage方法,

@foreach (var m in Model[0].HistoryValues)
{
  <img src="@Html.Action("getImage", "OverWatch", new { Mybytes= m.Bytes })"    alt="Chart Image" />
}

注意:

我不想将任何图像保存到项目中。此应用程序旨在供多个用户使用,我不想用大量图片来使用它。

我该如何解决这个问题?

编辑:

使用这样的write方法时:

控制器:

    foreach (var m in model[0].HistoryValues)
    {

        Chart chart2 = new Chart(width: 700, height: 600)
        .AddSeries(
        name: m.LastUpdateSTR,
        chartType: "bar",
        xValue: new[] { "Server", "Db", "Tickets" },
        yValues: new[] { m.ServerPerformance, m.Databaseperformance, m.SoldTicketsLastUpdate })
        .Write();


        m.Bytes =chart2.GetBytes("jpg");


    };

这只显示一个图表,这样做时我的布局也不显示。

编辑2:

试过这个:

        var chart = new Chart(width: 700, height: 600)
        .AddSeries(
        name: m.LastUpdateSTR,
        chartType: "bar",
        xValue: new[] { "Server", "Db", "Tickets" },
        yValues: new[] { m.ServerPerformance, m.Databaseperformance, m.SoldTicketsLastUpdate })
        .GetBytes("jpg");

        string t = Convert.ToBase64String(chart);
        t = t.Replace('-', '+');
        t = t.Replace('_', '/');

        m.Bytes = Convert.FromBase64String(t);

查看:

    @foreach (var m in Model[0].HistoryValues)
    {
        <img src="@Url.Action("getImage", "OverWatch", new { Mybytes= m.Bytes })" alt="Person Image" />
    }

结果。

enter image description here

0 个答案:

没有答案