Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.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# 试图通过HttpHandler显示二进制图像_C#_Jquery_Asp.net_Ajax - Fatal编程技术网

C# 试图通过HttpHandler显示二进制图像

C# 试图通过HttpHandler显示二进制图像,c#,jquery,asp.net,ajax,C#,Jquery,Asp.net,Ajax,我试图通过httphandler显示一个二进制图像。以下是我的代码: ajax调用 $.ajax({ type: "GET", url: "AnswerPostHandler.ashx", data: "imgid=1380", success: function (msg) { $(parent).append(msg); }, error: function (msg){ alert(msg);

我试图通过httphandler显示一个二进制图像。以下是我的代码:

ajax调用

$.ajax({
    type: "GET",
    url: "AnswerPostHandler.ashx",
    data: "imgid=1380",
    success: function (msg) {
           $(parent).append(msg);
    },
    error: function (msg){
           alert(msg);
    }
});
处理程序代码

public void ProcessRequest(HttpContext context)
{
    context.Response.ContentType = "image/JPEG";
    try
    {
        krystaladbDataContext db = new krystaladbDataContext();

        var binimg = (from i in db.image_tables
                      where i.IMG_ID.Equals(1380)
                      select i.IMG_THUMB).Single();


        byte[] b = binimg.ToArray();
        MemoryStream ms = new MemoryStream(b);
        Image img = Image.FromStream(ms);
        img.Save(context.Response.OutputStream,
            System.Drawing.Imaging.ImageFormat.Jpeg);
    }
    catch (Exception ex)
    {
        context.Response.Write(ex);
    }
}
有些东西似乎仍然不在这里,它正在转储二进制数据。Base64编码在这里也是一种选择,但我已经测试过了,它在IE7上不起作用(字面上是切掉图像的一部分)


你能就我在这里做错了什么以及如何改正提出建议吗?谢谢

这样做会更容易 $(父级).html(“”)

二进制流很难在浏览器中作为img源实现。

处理程序代码

public void ProcessRequest(HttpContext context)
{
    context.Response.ContentType = "image/JPEG";
    try
    {
        krystaladbDataContext db = new krystaladbDataContext();
        var binimg = (from i in db.image_tables
                      where i.IMG_ID.Equals(1380)
                      select i.IMG_THUMB).Single();


        byte[] b = binimg.ToArray();
        context.Response.BinaryWrite(b);
        context.Response.Flush();
    }
    catch (Exception ex)
    {
        context.Response.Write(ex);
    }
}
和html
标记


不需要构建图像。只需写入字节数组-context.Response.BinaryWrite(b);我尝试过这样做,但是图像不会显示…无法将ajax输出(二进制)写入dom元素。您可以使用base64 DataURI(在这种情况下,您必须修改处理程序代码),但它在浏览器中存在许多问题。最好且简单的选择是使用-image标记。谢谢@AVD,但是在这种情况下,处理程序返回了什么?您正在向响应流写入字节。代码对我来说似乎没问题。(您可以写入字节数组而不是生成图像)。请看我的帖子。非常感谢@AVD。我花了好几个小时搜索这个。知道如何用这种方式直接下载文件吗?使用
<img src="AnswerPostHandler.ashx?imgid=1380" alt="None" id="img1" />
 $("#showImageButton").click(function () {
                $("#img1").attr("src", "AnswerPostHandler.ashx?imgid=1380");
            });