2017-02-08 3 views
0

imagehandler.ashx Bild wird nicht in Chrome-Browser angezeigt. Wie kann ich es reparieren..?imagehandler.ashx Bild wird nicht in Chrom angezeigt

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

Bilder wie diese in Chrome-Browser suchen;

Screenshot an image in Chrome

Antwort

2

Sie senden nicht die content-Length. Es könnte die Bilder (und andere Dateien) in Chrome durcheinander bringen. Angenommen, die Datei wird natürlich korrekt in der Datenbank gespeichert.

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

Vielen Dank VDWWD. Mein Bild wird jedoch nicht in der DB gespeichert. In der DB befindet sich nur der Bildpfad. Das physische Image befindet sich im Verzeichnis "../Pictures/300/". Was kann ich für diese Situation tun? –

+0

Ich habe meine Antwort aktualisiert. – VDWWD

+0

Nochmals vielen Dank. Ich entfernte diese Aussage und arbeitete richtig; bin = (byte []) dt.Rows [0] ["img"]; –