2016-11-30 4 views
0

I Mitarbeiter Profil-Bild von Datenbank am Anzeigen Handler verwenden. Bilder werden im Internet Explorer zwar angezeigt, in Chrome und Firefox werden sie jedoch nicht angezeigt. Was könnte das Problem sein?Bild-Handler Bilder zeigen, die nicht in Chrome und FF

Hier ist mein Code:

aspx:

<% img_profile.ImageUrl="~/Handler.ashx?empcd="+Session["empcd"].ToString() ; 
    %> 
<asp:Image CssClass="img-rounded img-responsive profile" runat="server" ID="img_profile" Width="150" Height="150" /> 

Image Handler-Code:

public void ProcessRequest(HttpContext context) 
{ 
    try 
    { 
     OracleDataReader rdr = null; 
     OracleConnection dbConn; 
     dbConn = Conn.getConn(); 
     string empcd = context.Request.QueryString["empcd"].ToString(); 
     OracleCommand cmd = new OracleCommand("select photo img from olphrm.emp_personal where emp_code='"+empcd+"'", dbConn); 

     dbConn.Open(); 
     rdr = cmd.ExecuteReader(); 
     while (rdr.Read()) 
     { 

     context.Response.BinaryWrite((byte[])rdr["img"]); 
     } 
     if (rdr != null) 
     rdr.Close(); 
    } 
    catch (Exception ex) 
    { 

    } 
} 

Dies ist die Ausgabe auf Chrome:

[! [ Bildbeschreibung hier] [1]] [1]

Vielen Dank im Voraus für Ihre Hilfe geben !!!

UPDATE:

ich den folgenden Code in meinem Aspx-Seite hinzugefügt haben, jetzt das Bild person.png angezeigt wird, bedeutet dies, dass es ein Fehler ist .Wie kann ich diesen Fehler zu finden und lösen?

<% img_profile.ImageUrl="~/Handler.ashx?empcd="+Session["empcd"].ToString() ; 

    img_profile.Attributes["onerror"] = "this.src='Images/person.png';"; 
                 %> 

Antwort

-1

Sie sollten es in Base64-Zeichenfolge konvertieren.

public void ProcessRequest(HttpContext context) 
{ 
    try 
    { 
     OracleDataReader rdr = null; 
     OracleConnection dbConn; 
     dbConn = Conn.getConn(); 
     string empcd = context.Request.QueryString["empcd"].ToString(); 
     OracleCommand cmd = new OracleCommand("select photo img from olphrm.emp_personal where emp_code='"+empcd+"'", dbConn); 

     dbConn.Open(); 
     rdr = cmd.ExecuteReader(); 
     while (rdr.Read()) 
     { 

     context.Response.Write(Convert.ToBase64String((byte[])rdr["img"])); 
     } 
     if (rdr != null) 
     rdr.Close(); 
    } 
    catch (Exception ex) 
    { 

    } 
} 
+0

Wie und wo soll ich diese Methode nennen? –

+0

hat gerade die Antwort geändert. geändert am: context.Response.BinaryWrite ((byte []) rdr [ "img"]); –

+0

Ich habe es versucht, nicht funktioniert –

0

Sie geben keine ContentType an. Und hinzufügen content-Length ist eine gute Übung.

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

    //get your data from the db 
    while (rdr.Read()) 
    { 
     bin = (byte[])rdr["img"]; 
    } 

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

Ihr Code ist eine SQL-Injection sehr anfällig, da Sie nicht Validate empcd tun und Sie verwenden nicht parametrisierte Abfragen.

+0

Ich habe versucht, Ihren Code, immer noch das gleiche Problem; ( –

+0

Dann ist das Bild wahrscheinlich nicht richtig gespeichert. Sie können dies testen, indem Sie das Bild von der DB mit einem Bild von der Festplatte und senden. – VDWWD

+0

, wenn ein Problem ist Bild, warum seine Anzeige in IE? –

Verwandte Themen