如何在浏览器中显示仅包含其内容的图像(byte[])

发布于 2024-10-12 00:32:11 字数 449 浏览 2 评论 0原文

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

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

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

  1. 我应该选择什么文件名?
  2. 我什么时候应该删除它?我担心我们会泄露这些文件。

所以我不想将内容写入文件。还有其他方法吗?

提前致谢。


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

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

I'm developing a MVC application and I need to show an image in the browser, but I haven't the file physically on disk.

I only have a byte[] array in my model, with content of the image. Is there any "easy" trick to show the image in the view, without writing it to the disk?

The first approach that comes to my mind is writing a temp file, but:

  1. What file name should I choose?
  2. When should I delete it? I'm afraid that we will leak those files.

So I don't want to write the contents to a file. Is there any other approach?

Thanks in advanced.


EDIT: The result page is not only the image, I need to show some text, and below, the image, for example:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

把时间冻结 2024-10-19 00:32:11

我将创建一个从字节数组返回图像的控制器操作。在您的视图中,您可以使用普通的 标记,将 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" />

I'd create a controller action that returns the image from a byte array. In your view, you can use the normal <img> tag, setting the src attribute to your controller action that renders the image.

It would be something like this:

[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
}

From your View you can then do:

<p>Some text here</p>
<img src="<%= Url.Action("Render", "MyController", new { params as needed }) %>" alt="Image" />
千秋岁 2024-10-19 00:32:11

几个选项:

  • 编写一个 HTTP 处理程序,该处理程序将返回字节数组并将图像 URL 指向它
  • 编写一个自定义图像控制器并将图像 URL 指向它
  • 使用 数据 URI 方案 直接输出图像数据
  • 如果您只需要图像并且不提供 HTML,只需使用正确的标头将其流式传输即可

Several options:

  • Write a HTTP handler that will return the byte array and point the image URL to it
  • Write a custom image controller and point the image URL to it
  • Use the data URI scheme outputting the image data directly
  • If you just want the image and are not serving up HTML, just stream it out with the correct headers
飘过的浮云 2024-10-19 00:32:11

您可以拥有一个提供图像的页面,如下所示:

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”)

You can have a page that will serve image like that:

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

You should also set context.Response.ContentType to something meaningful. If you use ImageEncoder to generate array of bytes, you can use its mimeType property, if not - figure the way to provide a correct content-type (like "image/PNG")

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文