如何在浏览器中显示只有内容(byte [])的图像

时间:2011-01-14 11:31:10

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

我正在开发一个MVC应用程序,我需要在浏览器中显示一个图像,但我在磁盘上没有物理文件。

我的模型中只有一个byte[]数组,包含图像内容。是否有任何“简单”技巧可以在视图中显示图像,而无需将其写入磁盘?

我想到的第一种方法是写一个临时文件,但是:

  1. 我应该选择哪个文件名?
  2. 我该什么时候删除它?我担心我们会泄漏这些文件。
  3. 所以我不想把内容写到文件中。还有其他方法吗?

    先谢谢。


    编辑:结果页面不仅是图片,我需要显示一些文字,下面是图片,例如:

      <%= Response.Write("Some text here") %>
      <%= /* Here my image */ %>
    

3 个答案:

答案 0 :(得分:6)

我创建了一个控制器动作,它从一个字节数组中返回图像。在您的视图中,您可以使用普通的<img>代码,将src属性设置为渲染图像的控制器操作。

这样的某事

[HttpGet]
public ActionResult Render(...)
{
    byte[] imageBytes = ...;

    MemoryStream imageStream = new MemoryStream();
    imageStream.Write(imageBytes, 0, imageBytes.Length);

    return new FileStreamResult(imageStream, "image/png"); // might be a different mime type depending on your image type
}

从您的视图中,您可以执行以下操作:

<p>Some text here</p>
<img src="<%= Url.Action("Render", "MyController", new { params as needed }) %>" alt="Image" />

答案 1 :(得分:1)

有几个选择:

  • 编写一个HTTP处理程序,它将返回字节数组并将图像URL指向它
  • 编写自定义图像控制器并将图像URL指向它
  • 使用data URI scheme直接输出图像数据
  • 如果您只是想要图像并且没有提供HTML,请使用正确的标题
  • 将其流出

答案 2 :(得分:0)

您可以拥有一个可以提供图像的页面:

var context = System.Web.HttpContext.Current;
context.Response.Clear();    
context.Response.OutputStream.Write(buffer, 0, buffer.Length);
context.Response.End();

您还应该将context.Response.ContentType设置为有意义的内容。如果使用ImageEncoder生成字节数组,则可以使用其mimeType属性(如果不是) - 计算提供正确内容类型的方式(如"image/PNG"