2010-12-03 100 views
0

我有一個SQL Server 2008數據庫,其圖像字段包含圖片。如何顯示使用ASP.NET存儲在SQL Server數據庫中的圖片?

我在ASP.NET Web程序一個gridview,我需要顯示在圖片:

  1. 我的GridView

  2. 我的圖像控制,我在形式

我可以得到任何示例代碼嗎?

在此先感謝。

+0

的可能重複的[在SQL ASP.NET存儲圖像和檢索的Asp:圖像](http://stackoverflow.com/questions/698912/asp-net-store-image-in-sql-and -retrieve-for-aspimage) – 2010-12-03 21:23:27

+0

是存儲在FileStream中的圖像,還是存在於varbinary列中? – 2010-12-03 22:08:45

回答

0

您可以使用數據uri方案與base64(假設它存儲在base64中)字符串ie

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot"> 

看到這麼例如http://en.wikipedia.org/wiki/Data_URI_scheme

如果你使用,你會即對於中繼器數據綁定控件做到這一點:

<ItemTemplate> 
    <img src='data:image/<%# Eval("FileType") %>;base64,<%# Eval("ImageData") %> width='<%# Eval("ImgWidth")%>' height='<%# Eval("ImgHeight")%>' /> 
</ItemTemplate> 
0

使用通用處理程序從數據庫中獲取圖像,並顯示出使用ifram將是更好的選擇在網上顯示文件。

   iframeFile.Attributes.Add("src", "/ShowImage.ashx?id=" + id); 

這是一個通用的處理程序代碼來顯示圖像文件和PDF文件。如果你只是想顯示圖像文件只是刪除其他條件,並使用圖像/ JPEG擴展名。

public class ShowImage : IHttpHandler 
{ 
    public void ProcessRequest(HttpContext context) 
    { 
     Int32 imgID; 
     if (context.Request.QueryString["id"] != null) 
      imgID = Convert.ToInt32(context.Request.QueryString["id"]); 
     else 
      throw new ArgumentException("No parameter specified"); 

     byte[] buffer = ShowEmpImage(imgID); 
     bool temp = false; 
     string extension = ""; 
     var enc = new ASCIIEncoding(); 
     var header = enc.GetString(buffer); 
     dbClass db = new dbClass(); 
     extension = db.GetID("select fileExtension from tableName WHERE LOGuid=" + imgID, "fileExtension"); 
     if (extension == null || extension == "") 
     { 

      if (buffer[0] == 0x25 && buffer[1] == 0x50 
      && buffer[2] == 0x44 && buffer[3] == 0x46) 
      { 
       temp = header.StartsWith("%PDF-"); 
       extension = "application/pdf"; 
      } 
      else if (buffer[0] == 0xFF && buffer[1] == 0xD8 
      && buffer[2] == 0xFF && buffer[3] == 0xE0) 
      { 
       temp = header.StartsWith("%JPG-"); 
       extension = "image/jpeg"; 
       extension = "image/jpg"; 
      } 
      else if (buffer[0] == 0x89 && buffer[1] == 0x50 
      && buffer[2] == 0x4E && buffer[3] == 0x47) 
      { 
       temp = header.StartsWith("%PNG-"); 
       extension = "image/jpeg"; 
       extension = "image/png"; 
      } 
      else if (buffer[0] == 0x49 && buffer[1] == 0x49 
      && buffer[2] == 0x2A && buffer[3] == 0x00) 
      { 
       temp = header.StartsWith("%TIF-"); 
       extension = "image/jpeg"; 
       extension = "image/tiff"; 
       extension = "image/tif"; 
      } 
      else if (buffer[0] == 0x47 && buffer[1] == 0x49 
      && buffer[2] == 0x46 && buffer[3] == 0x38) 
      { 
       temp = header.StartsWith("%GIF-"); 
       extension = "image/jpeg"; 
       extension = "image/gif"; 
      } 
      else if (buffer[0] == 0x42 && buffer[1] == 0x4D 
      && buffer[2] == 0x46 && buffer[3] == 0x38) 
      { 
       temp = header.StartsWith("%BMP-"); 
       extension = "image/jpeg"; 
       extension = "image/bmp"; 
      } 
      else if (buffer[0] == 0x00 && buffer[1] == 0x00 
      && buffer[2] == 0x01 && buffer[3] == 0x00) 
      { 
       temp = header.StartsWith("%ICO-"); 
       extension = "image/jpeg"; 
       extension = "image/ico"; 
      } 
      else 
       extension = "image/jpeg"; 
      //else 
      //extension = "application/pdf"; 
     } 
     context.Response.ContentType = extension; 
     context.Response.AddHeader("content-length", buffer.Length.ToString()); 
     context.Response.BinaryWrite(buffer); 
    } 

    public byte[] ShowEmpImage(int imgID) 
    { 
     dbClass db = new dbClass(); 
     string sql = "SELECT LOGpdf FROM tableName WHERE LOGuid = @ID"; 
     SqlCommand cmd = new SqlCommand(sql, db.con); 
     cmd.CommandType = CommandType.Text; 
     cmd.Parameters.AddWithValue("@ID", imgID); 
     object img = null; 
     try 
     { 
      db.Connect(); 
      img = cmd.ExecuteScalar(); 
     } 
     catch 
     { 
      return null; 
     } 
     finally 
     { 
      db.Disconnect(); 
     } 
     return (byte[])img; 
    } 

    public bool IsReusable 
    { 
     get 
     { 
      return false; 
     } 
    } 
} 
相關問題