C# 如何在浏览器中仅显示包含内容的图像(字节[])
我正在开发一个MVC应用程序,需要在浏览器中显示一个图像,但磁盘上没有该文件 我的模型中只有一个C# 如何在浏览器中仅显示包含内容的图像(字节[]),c#,html,asp.net-mvc,asp.net-mvc-2,C#,Html,Asp.net Mvc,Asp.net Mvc 2,我正在开发一个MVC应用程序,需要在浏览器中显示一个图像,但磁盘上没有该文件 我的模型中只有一个byte[]数组,包含图像的内容。是否有任何“简单”的技巧可以在视图中显示图像,而不将其写入磁盘 我想到的第一种方法是编写临时文件,但是: 我应该选择什么文件名 我应该什么时候删除它?恐怕我们会泄露那些文件 所以我不想将内容写入文件。还有别的办法吗 提前谢谢 编辑:结果页不仅仅是图像,我需要显示一些文本,下面是图像,例如: <%= Response.Write("Some text her
byte[]
数组,包含图像的内容。是否有任何“简单”的技巧可以在视图中显示图像,而不将其写入磁盘
我想到的第一种方法是编写临时文件,但是:
编辑:结果页不仅仅是图像,我需要显示一些文本,下面是图像,例如:
<%= Response.Write("Some text here") %>
<%= /* Here my image */ %>
几个选项:
- 编写一个HTTP处理程序,返回字节数组并将图像URL指向该数组
- 编写自定义图像控制器并将图像URL指向该控制器
- 使用直接输出图像数据
- 如果您只需要图像,而不提供HTML,只需使用正确的标题将其流式输出即可
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”
)我将创建一个从字节数组返回图像的控制器操作。在视图中,可以对渲染图像的控制器操作使用normal属性
应该是这样的:
[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" />
这里有一些文本
“alt=”Image“/>
dude just stream it:-),我在SO和@Jani上寻找相同的问题:对不起,也许我忘了说我需要显示更多内容(文本)在结果页面中,请参阅我的编辑谢谢您的回复,我需要在我的输出页面中混合文本和图像,可能问题不清楚。请参阅我的编辑。感谢您的回复,我需要在我的输出页面中混合文本和图像,可能问题不清楚。请参阅我的编辑。是的,但我假设您将其存储在缓存或HttpContext中.Current.Items
,因此您只需将图片呈现页面的地址放在“主页”的
标记中“并使用缓存或上下文访问字节缓冲区,但在返回流之前,我必须将位置设置为0。否则,我收到一个错误,说写入的字节太少。所以imageStram后面的那行写。。。I添加:imageStream.Position=0;