0

imagehandler.ashx 图像不显示在 Chrome 浏览器中。我该如何解决它..?

我的代码(imagehandler.ashx):

public void ProcessRequest(HttpContext context)
{
    if (context.Request.QueryString["YazarID"] != null)
    {
        string YazarID = context.Request.QueryString["YazarID"];
        DataTable dt = new DataTable();
        string query = "select img from Register where YazarID='" + YazarID + "'";
        dt = Database.GetData(query);

        HttpResponse r = context.Response;
        r.WriteFile("../Pictures/300/" + dt.Rows[0]["img"]);
        HttpContext.Current.ApplicationInstance.CompleteRequest();
        context.Response.Flush();
        context.Response.Close();
        context.Response.End();
    }
}

在 Chrome 浏览器中看起来像这样的图像;

在 Chrome 中截取图像

4

1 回答 1

2

您没有发送content-Length. 它可能会弄乱 Chrome 中的图像(和其他文件)。当然,假设文件正确保存在数据库中。

public void ProcessRequest(HttpContext context)
{
    //create a new byte array
    byte[] bin = new byte[0];

    //get the item from a datatable
    bin = (byte[])dt.Rows[0]["img"];

    //read the image in an `Image` and then get the bytes in a memorystream
    Image img = Image.FromFile(context.Server.MapPath("test.jpg"));
    using (var ms = new MemoryStream())
    {
        img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
        bin = ms.ToArray();
    }

    //or as one-liner
    bin = File.ReadAllBytes(context.Server.MapPath("test.jpg"));

    //clear the buffer stream
    context.Response.ClearHeaders();
    context.Response.Clear();
    context.Response.Buffer = true;

    //set the correct ContentType
    context.Response.ContentType = "image/jpeg";

    //set the filename for the image
    context.Response.AddHeader("Content-Disposition", "attachment; filename=\"myImage.jpg\"");

    //set the correct length of the string being send
    context.Response.AddHeader("content-Length", bin.Length.ToString());

    //send the byte array to the browser
    context.Response.OutputStream.Write(bin, 0, bin.Length);

    //cleanup
    context.Response.Flush();
    context.ApplicationInstance.CompleteRequest();
}
于 2017-02-08T21:45:57.607 回答