1行のselectステートメントの結果セットから(SQL Server 2008のストアドプロシージャを介して)入力されたデータテーブルがあり、Image
画像を保存する型指定された列が含まれています.
asp:image
aspx ページにコントロールがあり、そのデータテーブルの対応するフィールドに画像を設定したいのですが、何もできません。コードビハインドからasp:image
そのデータテーブルのto image列を設定する方法を教えてください。
1行のselectステートメントの結果セットから(SQL Server 2008のストアドプロシージャを介して)入力されたデータテーブルがあり、Image
画像を保存する型指定された列が含まれています.
asp:image
aspx ページにコントロールがあり、そのデータテーブルの対応するフィールドに画像を設定したいのですが、何もできません。コードビハインドからasp:image
そのデータテーブルのto image列を設定する方法を教えてください。
を入れることができる<img src="data:image/png;base64,<BASE64 STRING>" />
ので、asp:image
のImageUrl
プロパティを に設定し"data:image/png;base64,xxx"
ます。
ただし、これに対するブラウザーのサポートはむらがあり、IE9 と firefox では正常に動作すると思われますが、古いブラウザーでこれがサポートされているかどうかはわかりません。
ashx
ただし、データベースを読み取って画像を返す汎用ハンドラーを作成することをお勧めします。方法については、次の Web サイトを参照してください: http://www.dotnetperls.com/ashx 。次に、ImageUrl
プロパティをこのハンドラ アドレスに設定します。
ASP.Net を使用して SQL Server データベースから画像を表示する
aspx ファイル
<asp:image ID="Image1" runat="server" ImageUrl ="ImageCSharp.aspx?ImageID=1"/>
csファイル
protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString["ImageID"] != null)
{
string strQuery = "select Name, ContentType, Data from tblFiles where id=@id";
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();
}
}
}
データ URL スキームを試してください:
<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);
}
Convert.ToBase64String を使用するだけで
byte[] bytes = (byte[])dr["YourImageField"];
string b64img = Convert.ToBase64String(bytes);
Image1.ImageUrl = "data:image/jpeg;base64," + b64img;