2012-04-13 8 views
3

Ich habe eine Datentabelle, die aus dem Resultset einer 1 Zeile SELECT-Anweisung gefüllt wird (über eine gespeicherte Prozedur in SQL Server 2008) und es enthält eine Image typisierte Spalte Ich speichere Bilder in.Bild von einer Datentabelle in Asp anzeigen: Bild in Code-Behind

Ich habe eine asp:image Kontrolle auf einer Aspx-Seite, und ich möchte das Bild auf das entsprechende Feld dieser Datentabelle setzen, aber alles, was ich tue, kann ich nicht. Bitte sagen Sie mir, wie kann ich die asp:image zu Bild Spalte dieser Datentabelle aus dem Code hinter setzen.

Antwort

2

Versuchen Sie, die Data URL scheme:

<img src="<%# ReturnEncodedBase64UTF8(Eval("ColumnA")) %>" /> 

protected static string ReturnEncodedBase64UTF8(object rawImg) 
{ 
    string img = "data:image/gif;base64,{0}"; //change image type if need be 
    byte[] toEncodeAsBytes = (byte[])rawImg;   
    string returnValue = System.Convert.ToBase64String(toEncodeAsBytes); 
    return String.Format(img, returnValue); 
} 
+0

Lieber Rick, ich war nicht in der Lage, diese Lösung dem Problem zuzuordnen, mit dem ich mich beschäftige. Im vorherigen Problem haben Sie mir geholfen, es gab eine Objektdatenquelle, an die ich mich gebunden habe, aber was ist, wenn ich eine Datentabelle im Code hinter mir habe und dieses Bild das einzige Steuerelement ist, an das ich binden möchte? – Farshid

+0

Wie soll ich aus Code dahinter wissen, dass img an diese Datentabelle gebunden werden muss. Es war das größte Problem, das ich behandelt habe, um Ihre bisherige Lösung auf diesen Kontext anzuwenden. – Farshid

+0

Ich habe ein IMG-Tag in einem Listenansicht und verwenden Sie diese Methode. Das Problem ist gelöst. Noch einmal Danke. – Farshid

2

Sie könnten setzen <img src="data:image/png;base64,<BASE64 STRING>" />, so würden Sie die 's ImageUrl Eigenschaft auf "data:image/png;base64,xxx" setzen.

Allerdings vermute ich, dass die Browser-Unterstützung auf diesem ist fleckig, funktioniert gut in IE9 und Firefox, aber ich bin mir nicht sicher über die Unterstützung älterer Browser dafür.

Eine Alternative würde ich jedoch empfehlen, einen generischen Handler ashx zu erstellen, der die Datenbank liest und ein Bild zurückgibt. Sie können diese Website ausprobieren, wie es geht: http://www.dotnetperls.com/ashx, dann würden Sie die ImageUrl Eigenschaft auf diese Handler-Adresse setzen.

+0

Lieber Mathew, Wie sollte ich img konfigurieren, um von Datatable Code hinter dann zu akzeptieren? – Farshid

2

Display Images from SQL Server Database using ASP.Net

aspx Datei

<asp:image ID="Image1" runat="server" ImageUrl ="ImageCSharp.aspx?ImageID=1"/> 

cs Datei

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Request.QueryString["ImageID"] != null) 
    { 
     string strQuery = "select Name, ContentType, Data from tblFiles where [email protected]"; 
     SqlCommand cmd = new SqlCommand(strQuery); 
     cmd.Parameters.Add("@id", SqlDbType.Int).Value 
     = Convert.ToInt32 (Request.QueryString["ImageID"]); 
     DataTable dt = GetData(cmd); 
     if (dt != null) 
     { 
      Byte[] bytes = (Byte[])dt.Rows[0]["Data"]; 
      Response.Buffer = true; 
      Response.Charset = ""; 
      Response.Cache.SetCacheability(HttpCacheability.NoCache); 
      Response.ContentType = dt.Rows[0]["ContentType"].ToString(); 
      Response.AddHeader("content-disposition", "attachment;filename=" 
      + dt.Rows[0]["Name"].ToString()); 
      Response.BinaryWrite(bytes); 
      Response.Flush(); 
      Response.End(); 
     } 
    } 
} 
+0

Sehr geehrte Pranay, Die Lösung war richtig, aber es hat Nebenwirkungen auf App-Design. Ihre Lösung funktioniert jedoch einwandfrei. Vielen Dank. – Farshid

0

einfach durch Convert.ToBase64String mit

 byte[] bytes = (byte[])dr["YourImageField"]; 
     string b64img = Convert.ToBase64String(bytes); 
     Image1.ImageUrl = "data:image/jpeg;base64," + b64img;