我有一个生成图像的 ASP.NET MVC 控制器(它们存储在内存中,我不想将它们存储在硬盘上)并且应该将它们返回到我的视图中。
问题是:我不知道如何从一个控制器方法返回多个图像(我想在 1 个视图中显示图像)。我知道我可以使用FileResult
例如返回单个图像,但我不知道(不是在 google/stackoverflow 上)如何从同一方法返回多个图像。无法将方法拆分为多个方法。哦,所有图像都转换为 a byte[]
,但如有必要,可以反转。
我有一个生成图像的 ASP.NET MVC 控制器(它们存储在内存中,我不想将它们存储在硬盘上)并且应该将它们返回到我的视图中。
问题是:我不知道如何从一个控制器方法返回多个图像(我想在 1 个视图中显示图像)。我知道我可以使用FileResult
例如返回单个图像,但我不知道(不是在 google/stackoverflow 上)如何从同一方法返回多个图像。无法将方法拆分为多个方法。哦,所有图像都转换为 a byte[]
,但如有必要,可以反转。
这应该有效。请注意,我正在从磁盘读取我的图像,但它们可以来自内存或任何地方。然后在客户端使用 java-script 来显示它们。
[HttpGet]
public JsonResult Images()
{
var image1Base64 = Convert.ToBase64String(System.IO.File.ReadAllBytes(Server.MapPath("~/Images/1.jpg")));
var image2Base64 = Convert.ToBase64String(System.IO.File.ReadAllBytes(Server.MapPath("~/Images/2.jpg")));
var jsonResult = Json(new { image1 = image1Base64, image2 = image2Base64 }, JsonRequestBehavior.AllowGet);
jsonResult.MaxJsonLength = int.MaxValue;
return jsonResult;
}
如果您有权访问图像的 MIME 类型,则始终可以将它们呈现为 Base64 编码的图像,而不是向不同的控制器方法发出另一个请求。这是我使用的视图模型:
public class ImageViewModel
{
public string FileName { get; set; }
public string MIME { get; set; }
public byte[] Data { get; set; }
public override string ToString()
{
return string.Format(@"data:{0};base64,{1}", MIME.ToLower(), Convert.ToBase64String(Data));
}
}
您可以在标记的属性中使用该属性Filename
,因此您的视图中的标记和模型绑定看起来像这样(假设 Razor 语法):alt
<img />
<img src="@model.ToString()" alt="@model.FileName" />
你确实丢失了图像缓存,AFAIK - 这对我来说不是问题,但对于某些人来说是可以理解的。
我认为您可以通过另一种方式解决它,而不是返回多个图像,您可以创建一个实用方法,将图像加载到控制器中
public FileContentResult GetImage(int imageId)
{
var image = GetImageById(imageId); // get from a list for example
return File(image, "image/jpeg"); // your image Mime type
}
并在View
您可以执行以下操作时,迭代图像
@foreach (var image in Model)
{
<img alt="" src="@Url.Action("GetImage", "ControllerName", new {imageId =image.Id})"/>
}
您希望根据用户的输入显示多个图像,但不想保存到硬盘(聊天)。因此,我建议您使用会话变量来保存用户输入。并使用简单FileResult
的基于该会话变量返回多个图像。
http://blog.theobjectguy.com/2009/12/session-with-style.html
如果您的要求是在一个视图中显示多个图像,那么使用 2 种操作方法会更容易。一个返回带有 FileResult 的图像,另一个返回一个只使用标准 html img 标签指向第一个操作方法的图像