2016-05-23 103 views
0

我的ASP MVC網站有問題。我試圖將byte[]轉換爲cshtml文件中的「on the fly」圖像。下面是代碼示例:ASP MVC - byte [] to Image

<div class="col-md-6 portfolio-item"> 
    <table> 
     @foreach (var item in new Projek2.Models.DatabaseEntities().Photos) 
     { 
       <tr> 
       <td> 
        @using (var ms = new MemoryStream(item.Photo1)) 
        { 
         <img [email protected](ms)/> 
        } 
       </td> 
       <td> 
        @Html.DisplayFor(modelItem => item.FileName) 
       </td> 
      </tr> 
     } 
    </table> 
</div> 

它(只要記得InvalidOperation)期間FromStream()轉換引發錯誤或僅顯示小的佔位符,而不是圖像(如空載圖像)。

任何人都知道將byte[]轉換爲有效的cshtml圖像的技巧?

+0

使用流將無法正常工作。你可以將它轉換爲一個數據url,它保存圖像源的64位字符串表示。 – Nkosi

回答

0

使用以下假設

  • item.Photo1爲byte []
  • item有一個包含照片的MIME類型像image/pngimage/jpeg等一默屬性..從文件名其他明智的,你可以得到你的MIME類型假定名稱包含文件擴展名。

您可以創建一個Data URI scheme並將其嵌入爲圖像的源(src)。

<div class="col-md-6 portfolio-item"> 
    <table> 
     @foreach (var item in new Projek2.Models.DatabaseEntities().Photos) 
     { 
      <tr> 
       <td> 
        <img src="@System.String.Format("data:{0};base64,{1}",item.Mime,Convert.ToBase64String(item.Photo1))"/> 
       </td> 
       <td> 
        @Html.DisplayFor(modelItem => item.FileName) 
       </td> 
      </tr> 
     } 
    </table> 
</div> 

請注意,從我的假設,如果該項目沒有存儲的圖像類型,那麼你可以創建一個輔助方法來獲得從圖像文件名給它包含圖像的文件擴展名的類型。使用格式如image\{file extension}