2013-10-02 54 views
0

我有一個ASP.NET網站,我想輸入EmployeeName,並上傳EmployeePhoto,然後檢索員工信息並在網站上顯示Employeephoto。從數據庫檢索圖像,並在ASP.NET上顯示沒有httphandler

我用EmployeePhoto創建了一個SQL表 - 輸入「image」。

我用這個代碼中插入對(正常工作)照片 http://i.stack.imgur.com/qmphk.png

然而,當我想我在SQL插入圖片加載到網站上,我得到這個InputStream中不存在錯誤。

負荷照片碼&錯誤http://i.stack.imgur.com/X2okW.png

我不想使用的HttpHandler解決方案

編輯:我沒有正確的答案卻:(

謝謝

  cnn.Open(); 
      SqlCommand cmd = new SqlCommand("SELECT EmployeeFirstName,EmployeeLastName,EmployeePhoto FROM Employees WHERE EmployeeID = @myvalue", cnn); 
      cmd.Parameters.AddWithValue("@myvalue", (ListBox1.SelectedValue)); 
      SqlDataReader dr = cmd.ExecuteReader(); 
      if (dr.HasRows) 
      { 
       while (dr.Read()) 
       { 
        TextBox1.Text = dr.GetString(0); 
        TextBox2.Text = dr.GetString(1); 


        byte[] imagedata = (byte[])dr[2]; 
        InputStream.Read(imagedata, 0, (byte[])dr[2]); 
        Image Image1 = Image.FromStream(imagedata); 

       } 
      } 
      cnn.Close(); 
+0

**「我不想使用httphandler解決方案」**:爲什麼? –

+0

你想顯示存儲在數據庫中的圖片嗎?處理程序是唯一的解決方案。我認爲這是重複的,因爲要求是相同的。 –

+0

檢查你的'使用'。你必須知道,有不止一個'Image'類,就像@Nunners在其下面的回答中所說的 –

回答

2

更換

   byte[] imagedata = (byte[])dr[2]; 
       InputStream.Read(imagedata, 0, (byte[])dr[2]); 
       Image Image1 = Image.FromStream(imagedata); 

隨着

   byte[] imagedata = (byte[])dr[2]; 
       Image Image1 = Image.FromStream(new MemoryStream(imagedata)); 

它看起來像發生了誤差,因爲它無法找到您所使用的InputStream對象。通過創建一個新的MemoryStream對象來繞過這一點。

此外,你正在傳遞一個二進制數組到Image.FromStream,我不認爲會被正確接受。

同樣使用Image對象可能不會幫助您使用此解決方案,因爲它與Image網絡控件不同。

下面詳細信息請參閱:

System.Drawing.Image

System.Web.UI.Controls.Image

+0

我得到這個錯誤:(http://n1310.hizliresim.com/1g/2/t6tk5.png –

-1

這是因爲沒有所謂的InputStream對象。

試試這個:

byte[] imagedata = (byte[])dr[2]; 
Image Image1 = Image.FromStream(new MemoryStream(imagedata)); 

這將使byte[]到內存流,然後讓你使用Image.FromStream();

+0

我得到這個錯誤http: //n1310.hizliresim.com/1g/2/t6tk5.png –

+0

op想要在網絡上顯示圖片,這段代碼沒有顯示出來,要麼更新你的代碼以滿足要求,要麼解釋OP爲什麼要求一個處理程序 –

+0

查看他的代碼,他很不清楚他使用的是什麼圖像對象,我引用了位圖對象,因爲他的代碼是這樣的: 'Image Image1 = Image.FromStream(imagedata);' 他所要求的然後已經覆蓋[這裏](http://stackoverflow.com/questions/1738020/bytearray-to-image-asp-net) – TheDaveJay

-1

我相信這可能工作:

byte[] bitMapData = dr[2] as byte[] ?? null; 

     if (bitMapData != null) 
     { 
      using (MemoryStream stream = new MemoryStream(bitMapData)) 
      { 
       System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(stream); 
      } 
     } 
+0

照片不會出現在網站上:( –

+0

此外,,所以」Image1「不存在於代碼中的任何地方,那麼它如何在那裏顯示呢? –

+0

該op想要在網絡上顯示圖片。此代碼不顯示如何。要麼更新您的代碼以滿足要求,要麼解釋OP爲什麼需要處理程序。 –

1

隨着HTML設計的方式,你應該因爲HTML的標籤img是指外部資源(例如src標籤)使用某種形式的處理程序。最長時間沒有辦法將圖像包含在服務器返回的HTML中。

這就是說,事情已經改變,現在是可能的。您可以基於-64編碼圖像,並將其納入使用特殊格式src屬性標記本身:

<img src="data:<MIMETYPE>;base64,<BASE64_ENCODED_IMAGE>"> 

並非所有的瀏覽器都支持這一點,所以要小心。

此外,這種方法的一大缺點是圖像沒有被瀏覽器緩存,所以每次請求這個頁面時,服務器都會產生額外的開銷來產生這個Base64值,而如果你有一個URL,瀏覽器可以基於URL緩存圖像,而不必在每次請求時從服務器獲取它。

要獲得Base64字符串,請使用靜態方法System.Convert.ToBase64String(byte[])

相關問題