2017-02-08 10 views
0

imagehandler.ashx画像はChromeブラウザに表示されません。どうすれば修正できますか?imagehandler.ashx画像がクロムに​​表示されない

マイコード(imagehandler.ashx):Chromeブラウザでは、このように見て

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(); 
    } 
} 

画像。

Screenshot an image in Chrome

答えて

2

あなたはcontent-Lengthを送信していません。それはクロムの画像(と他のファイル)を混乱させる可能性があります。もちろん、ファイルがデータベースに正しく保存されていると仮定します。

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(); 
} 
+0

ありがとうございますVDWWD。ただし、私のイメージはDBに保存されません。画像パスのみがDBにあります。物理的なイメージは "../Pictures/300/"のディレクトリの下にあります。このような状況のために何ができるのですか? –

+0

私は自分の答えを更新しました。 – VDWWD

+0

もう一度ありがとう。私はこの声明を削除し、正しく働いた。 bin =(byte [])dt.Rows [0] ["img"]; –

関連する問題