我正在开发一个MVC应用程序,我需要在浏览器中显示一个图像,但我在磁盘上没有物理文件。
我的模型中只有一个byte[]
数组,包含图像内容。是否有任何“简单”技巧可以在视图中显示图像,而无需将其写入磁盘?
我想到的第一种方法是写一个临时文件,但是:
所以我不想把内容写到文件中。还有其他方法吗?
先谢谢。
编辑:结果页面不仅是图片,我需要显示一些文字,下面是图片,例如:
<%= Response.Write("Some text here") %>
<%= /* Here my image */ %>
答案 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)
有几个选择:
答案 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"
)