Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在浏览器中仅显示包含内容的图像(字节[])_C#_Html_Asp.net Mvc_Asp.net Mvc 2 - Fatal编程技术网

C# 如何在浏览器中仅显示包含内容的图像(字节[])

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

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

我的模型中只有一个
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;