创建图像的临时URL

时间:2016-02-22 14:43:01

标签: c# asp.net asp.net-mvc

我有一个字节数组格式的图像列表。我想在页面上显示这些图像。此代码有效:

List<string> photoData = new List<string>();

foreach (var photoBytes in PhotoByteArrayList)
{
    var imageBase64Data = Convert.ToBase64String(photoBytes);
    var imageUrl = "data:image/JPEG;base64," + imageBase64Data;
    photoData.Add(imageUrl);
}

return View(photos);

我的观点如下:

@model List<string>

@{
    ViewBag.Title = "Index";
}

<h2>All Images</h2>

@foreach (var item in @Model)
{
    <img src="@item" />
}

这很有效。但是:此解决方案意味着页面的HTML包含巨大的图像数据串。这会导致整个页面需要很长时间才能加载。我宁愿做的是:

  1. 将图像字节数组存储在控制器中的某种临时存储器中。
  2. 为此图片生成临时网址。
  3. 将URL字符串列表传递给我的页面。
  4. 使用这些临时网址显示图片。
  5. 我将如何做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以创建一个返回图像的动作方法。使用File方法返回图像。

public ActionResult MyImg(int id)
{
   byte[] bytes =GetByteArrayOfYourImageFromSomeWhere(id);
   return File(bytes, "image/jpg");
}

Assumin GetByteArrayOfYourImageFromSomeWhere()方法接受与您的图片相关的唯一ID,并返回存储在表格中的图像的字节数组版本。

在您的视图中,您可以将此操作方法称为图像源

<img src="@Url.Action("MyImg","YourControllerName",new { id=250 })" alt="hi" />

250替换为与您的图片相关的有效唯一数字ID。