2016-09-05 102 views
2

我有一個字節數組,並試圖從中顯示圖像。asp.net從字節數組顯示圖像

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data.Linq; 

namespace RealPortableTerminal 
{ 
public partial class resim : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     PortableTerminalDbEntities entity = new PortableTerminalDbEntities(); 
     byte[] arr = (from b in entity.Sicil where b.Id == 31 select b.Fotograf).First(); 

     Image rImage = null; 
     using (MemoryStream ms = new MemoryStream(arr)) 
     { 
      rImage = Image.FromStream(ms); 
     } 
    } 
} 
} 

它強調FromStream並說 'System.Web.UI.WebControls.Image' 不包含 'FromStream' 的定義。看來加入System.Data.Linq引用並沒有改變任何東西。我錯過了什麼嗎?順便說一句,我很確定我正確地從數據庫中獲取字節數組。

回答

8

另一種方式來做到這一點是你的字節數組轉換爲基64字符串,並將其賦值給的rImageImageUrl財產,像這樣:

rImage.ImageUrl = "data:image;base64," + Convert.ToBase64String(arr); 

你不需要中間MemoryStream或單獨的頁面...如果字節數組是瀏覽器支持的圖像格式,它將顯示。祝你好運。

1

你可能會想到System.Drawing.Image;該類支持FromStream

This forum post向您展示了幾種在WebForms中加載動態圖像的方法。

可能最簡單的方法是創建一個單獨的aspx頁面,它可以像在此處一樣加載圖像並使用Response.BinaryWrite將其保存到響應流中,然後在您正在處理的頁面中創建一個Image控件使用新的aspx頁面作爲圖片的URL。如果您需要加載各種圖像,您當然可以使用查詢字符串參數。

+0

您不應該爲此使用ASPX頁面。這些是用於Web窗體頁面的,並且將它們用於這類事情是很難的。您可以爲此編寫處理程序或通用處理程序(.ashx)。 – mason

3
<img id="img" runat="server" alt=""/> 

在後面的代碼

string base64String = Convert.ToBase64String(arr, 0, arr.Length); 
img.Src = "data:image/jpg;base64," + base64String; 

你不會需要MemoryStream