2012-03-07 12 views
2

私はこのサイトのほとんどのポストを見てきましたが、SQLサーバデータベースへの画像アップロード&の永続性を扱っているようです。asp.net内の画像を保存/表示するMVC

イメージが正しく保存されていないか、バイトが書き込み/取得されている間にイメージが有効でないため、データベースから正しく引き抜かれていません。アップロードされた画像のサイズを元のサイズと比較すると、サイズが異なります(より大きい)?

モデル

public byte[] Photo { get; set; } 
public string PhotoMimeType { get; set; } 
public string PhotoName { get; set; } 

SQL Serverの

[PhotoMimeType] [nvarchar](50) NULL, 
[PhotoName] [nvarchar](50) NULL, 
[Photo] [image] NULL, 

私は画像を保存するには、次のしているコントローラ内:

public ActionResult Edit(AgentInfo modifiedAgent, HttpPostedFileBase postedFile) 
{ 
    if(ModelState.IsValid) 
    { 
     var model = _agentRepository.GetByID(modifiedAgent.AgentID); 
     if (TryUpdateModel(model)) 
     { 
      if (postedFile != null) 
      { 
       int imageLength = postedFile.ContentLength; 
       byte[] imgBytes = new byte[imageLength]; 
       postedFile.InputStream.Read(imgBytes, 0, imageLength); 

       model.PhotoMimeType = postedFile.ContentType; 
       model.PhotoName = postedFile.FileName; 
       model.Photo = imgBytes; 
      } 
      _agentRepository.Save(model); 
      return RedirectToAction("ManageAgents", "Agent"); 
     } 
    } 

    return View("Edit", modifiedAgent); 
} 

検索

[HttpGet] 
public ActionResult GetImage(int id) 
{ 
    var agent = _agentRepository.GetByID(id); 
    return File(agent.Photo, agent.PhotoMimeType, agent.PhotoName); 
} 

表示

<img src='@Url.Action("GetImage", "Agent", new { id = Model.AgentID })' /> 

EDIT:

まあ、それはどのように私はすべて一緒にそれを回すこの配線たとの問題だと思った後に私のデータベースマッピング..... frick

流暢 - NHibernateのでマッピングし、あなたがイメージバイトを保存したいときFYI、SQLデータ型は次のマッピングとvarbinary型(最大)である:

Map(x => x.Photo).Column("Photo").Length(2147483647).CustomSqlType("varbinary(MAX)"); 

答えて

4

はちょうどそれを読む前にInputStreamを巻き戻してみてください。

postedFile.InputStream.Position = 0; 

または一時的MemoryStreamを使用します。

using (var memoryStream = new MemoryStream()) 
{ 
    postedFile.InputStream.CopyTo(memoryStream); 
    model.Photo = memoryStream.ToArray(); 
} 
+0

おかげで、ダーリンは両方のオプションを通過した後、あなたはそれがより深く掘りに私をリードして、私はどのWA問題を発見私の流暢なnhibernateのマッピングで – Jesse

関連する問題