2016-10-15 16 views
1

私のコードは最初の入力画像のみを保存します。私はthis linkを見つけたので、私はどのように複数の画像を扱うことができるのか見てみましょう。MVCを使用して複数の画像をデータベースに保存

<img class="img-rounded img-responsive" src="data:image/jpg;base64,@System.Convert.ToBase64String(item.Image)" width="250" height="400" /> 

私は複数の画像を保存しても、それらを表示するにはどうすればよい:私はHttpPostedFileBase[]HttpPostedFileBaseを変更すると、私はこのような1つの画像のみを表示

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Create([Bind(Include = "Id,Name,Color,CategoryId,GenderId,Image")] Product product, HttpPostedFileBase image) 
    { 
     if (ModelState.IsValid) 
     { 
      byte[] imagee = null; 
      if (Request.Files.Count > 0) 
      { 
       image = Request.Files[0]; 
       using (BinaryReader br = new BinaryReader(image.InputStream)) 
       { 
        imagee = br.ReadBytes(image.ContentLength); 
       } 
      } 
      product.Image = imagee; 
      db.Products.Add(product); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
    } 

HttpPostedFileBase imageためInputStreamContentLengthを使用することはできませんか?

+0

はあなたが_InputStreamとContentLength_を使用することはできません何を意味するのですか?なぜあなたは 'Request.Files [0]'を使っていますか?あなたのメソッドはすでにファイルのパラメータを持っています。 'IEnumerable イメージ'の場合、 'foreach(イメージ内のHtttpPostedFileBaseファイル){....' –

+0

という意味で、 'InputStream'の定義と拡張メソッド ' 'HttpPostedFileBase []'型の最初の引数を受け付けるInputStreamは見つかりませんでした。また、 'ContentLength'には同じエラーがあります。私たちの教授はこのコードを共有しましたが、私はコードを複数の画像を格納するものとして拡張したいと思います。あなたのコメントによると、すべての入力を得るのに 'foreach'を使うだけですか? –

+1

'HttpPostedFileBase []'はコレクションです。コレクション内の各ファイルを取得するには、コレクションをループする必要があります。そしてもちろん、あなたの 'product.Image'は1つの画像しか保持していないので動作しません。イメージを保存するために2番目のデータベーステーブルが必要です(製品IDにFKを使用) –

答えて

0

コメントに記載されているStephenとして、現在のエンティティクラス定義は、製品に対して1つのイメージ(1対1)を保存するためのものです。イメージ用に複数のイメージを使用する場合は、イメージ用の別のテーブルを作成し、それらの間に1対多数の接続を持たせることを検討する必要があります。あなたのHttpPostアクションで

public class Product 
{ 
    public int Id { set; get;} 
    public string Name { set; get;} 
    public string Color { set; get;} 
    // Add other properties needed as well 

    public ICollection<Image> Images { set; get;} 
} 
public class Image 
{ 
    public int Id { set; get;} 
    public byte[] ImageData { set; get;} 
    public int ProductId { set; get;} 
} 

[HttpPost] 
public ActionResult Create([Bind(Include = "Id,Name,Color,CategoryId,GenderId")] 
          Product product, IEnumerable<HttpPostedFileBase> images) 
{ 
    if (ModelState.IsValid) 
    { 
     db.Products.Add(product); 

     if (images!=null) 
     { 
      var imageList= new List<Image>(); 
      foreach(var image in images) 
      { 
       using (var br = new BinaryReader(image.InputStream)) 
       { 
       var data = br.ReadBytes(image.ContentLength); 
       var img=new Image { ProductId=product.Id }; 
       img.ImageData = data; 
       imageList.Add(img); 
       } 
      } 
      product.Images = imageList; 
     } 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 
    return View(product); 
} 
関連する問題