2017-12-07 5 views
1

Northwindデータベースを使用する単純なMVC 5アプリケーションがあります。問題のビューは、NorthwindにCategoriesテーブルのカテゴリの一覧を表示しています。私はimg tagを使用してバイト配列をレンダリングしようとしましたが、成功しませんでした。MVC 5のImageとしてbyte []をレンダリングできません。ASP.Net

私はMVC How to display a byte array image from model見てきましたし、カスタムHTMLヘルパーを使用してみましたが、でもそれは何かがイメージにバイト[]を変換するとき、私は私のアプローチで行方不明です

あります動作しませんでしたか?以下しようとしました

(私が試したもののためにimgタグを見る)

@foreach (var item in Model) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.CategoryName) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Description) 
     </td> 
     <td> 
      <img src="@String.Format("data:image/jpg;base64,{0}", Convert.ToBase64String(item.Picture))" /> 
     </td> 
     <td> 
      @Html.ActionLink("Edit", "Edit", new { id=item.CategoryID }) | 
      @Html.ActionLink("Details", "Details", new { id=item.CategoryID }) | 
      @Html.ActionLink("Delete", "Delete", new { id=item.CategoryID }) 
     </td> 
    </tr> 
} 

EFカテゴリクラス

public partial class Category 
{ 
    public int CategoryID { get; set; } 

    [Required] 
    [StringLength(15)] 
    public string CategoryName { get; set; } 

    [Column(TypeName = "ntext")] 
    public string Description { get; set; } 

    [Column(TypeName = "image")] 
    public byte[] Picture { get; set; } 
} 

対処方法

public class CategoriesController : Controller 
    { 
     private NorthwindDB db = new NorthwindDB(); 

     // GET: Categories 
     public ActionResult Index() 
     { 
      return View(db.Categories.ToList()); 
     } 
    } 

答えて

1

私は、Nortwindイメージを変換してbase64文字列をフォーマットするのは容易ではないことを知りました。私はsourceを見つけました。説明によると、"NorthwindイメージはMicrosoft Accessで作成されたため、78バイトのOLEヘッダーがあります"。したがって、ヘッダーを削除する必要があります。まず、Categoryエンティティを変更します。

public partial class Category 
{ 
    public int CategoryID { get; set; } 

    [Required] 
    [StringLength(15)] 
    public string CategoryName { get; set; } 

    [Column(TypeName = "ntext")] 
    public string Description { get; set; } 

    [Column(TypeName = "image")] 
    public byte[] Picture { get; set; } 

    [NotMapped] 
    public string Base64String 
    { 
     get 
     { 
      var base64Str = string.Empty; 
      using (var ms = new MemoryStream()) 
      { 
       int offset = 78; 
       ms.Write(Picture, offset, Picture.Length - offset); 
       var bmp = new System.Drawing.Bitmap(ms); 
       using (var jpegms = new MemoryStream()) 
       { 
        bmp.Save(jpegms, System.Drawing.Imaging.ImageFormat.Jpeg); 
        base64Str = Convert.ToBase64String(jpegms.ToArray()); 
       } 
      } 
      return base64Str; 
     } 
    } 
} 

次に、Base64Stringプロパティをimg属性内に配置します。

<img src="@String.Format("data:image/jpg;base64,{0}", item.Base64String)" /> 
+0

フォーマットに変更してもまだ動作しません。 – Sunil

+0

HTML出力を共有しますか? – lucky

+0

このビデオの詳細な出力は次のとおりです。https://www.screencast.com/t/kk7bYdnEpc – Sunil

関連する問題