2016-12-18 44 views
-1

我已經將圖像與其他信息一起存儲在表中的一列,但是當檢索關於帖子的整個信息時,我有三行顯示圖像。 我正在'斷開img'圖標。ASP.NET MVC:查看存儲的圖像作爲字節[]從Db

型號:

public class Event 
{ 
[Key] 
public int Id { get; set; } 
public string EventName { get; set; } 
public byte[] EventPhoto { get; set; } 
} 

創建動作:

[Authorize] 
    [HttpPost] 
    public ActionResult Create(Event events, [Bind(Exclude = "EventPhoto")]EventController model) 
    { 
    if (ModelState.IsValid) 
    { 
     using (var database = new EventSpotDbContext()) 
     { 
      byte[] imageData = null; 
      if (Request.Files.Count > 0) 
      { 
       HttpPostedFileBase poImgFile = Request.Files["EventPhoto"]; 

       using (var binary = new BinaryReader(poImgFile.InputStream)) 
       { 
        imageData = binary.ReadBytes(poImgFile.ContentLength); 
       } 
      } 
      events.EventPhoto = imageData; 
      database.Events.Add(events); 
      database.SaveChanges(); 
      return RedirectToAction("Main"); 
     } 
    } 
return View(events); 
} 

輸入視圖:

 @Html.LabelFor(m => m.EventPhoto) 
    <input type="file" name="Event" id="fileUpload" accept=".png,.jpg,.jpeg,.gif,.tif" /> 

顯示屏操作:

public ActionResult DisplayImg(Event events) 
    { 
     var bdEvents = HttpContext.GetOwinContext().Get<EventSpotDbContext>(); 
     var userImage = bdEvents.Users.Where(x => x.Id == (events.Id).ToString()).FirstOrDefault(); 
     return new FileContentResult(events.EventPhoto, "image/jpg"); 
    } 

顯示視圖:

<div class="container"> 
<article> 

    <p> @Model.EventName </p> 
    <img src="@Url.Action("DisplayImg", "Event")" /> 

</article> 

任何解決我的問題?

+0

你'@ Url.Action(「DisplayImg」,「事件」)'不會將任何數據傳遞到' DisplayImg()'方法和'Event events'參數只是一個默認的實例 - 'EventPhoto'的值是'null'!但是這個方法不應該包含一個參數,它無論如何都是一個模型 - 它需要(比如說)int ID',其中'ID'是'Event'的標識符,並且你從數據庫中獲得'Event'。 (如果你確實嘗試將'Event'的屬性傳遞給該方法,它肯定會因爲查詢字符串限制而拋出異常) –

+0

你是否懶得閱讀註釋 - 你仍然不會傳遞任何東西給方法! –

+0

對不起,這是帖子中的一個錯字,但我已經在代碼中修復了這個錯誤,但仍然無法正常工作。 是這樣它需要是:​​ ? –

回答

0

對於一件事,您的DisplayImg操作需要Event參數,因此請嘗試發送一個。你現在正在發送一個字符串。試試這個:

<img src="@Url.Action("DisplayImg", Model)" /> 

一個更好的解決方法就是通過事件條目的ID,通過發送Model.Id和接收您用於查找的int

但是,您編寫的DisplayImg函數也處於關閉狀態,您正在使用參數的Id屬性查找圖像,然後返回EventPhoto字段。你應該返回你擡頭看的圖像。

這就像我可以告訴你沒有實際的請求/響應數據轉儲一樣。 「破碎的圖像」與牛奶一樣有助於調試。請不要將牛奶放在電腦上修復錯誤。

+0

我已經編輯了我的代碼和帖子,但結果是一樣的嗎?任何其他建議? –

0

您的<file>屬性名爲Event,但您嘗試使用Request.Files["EventPhoto"]訪問該文件。

你應該使用您爲它的視圖中指定的名稱:

Request.Files["Event"] 
+1

我想你會發現這只是OP的[最後一個問題]的錯字(http://stackoverflow.com/questions/41204031/uploading-image-as-part-of-a-a- form-asp-net-mvc): ) –

+0

我認爲OP需要找到一個使用'HttpPostedFileBase'的例子 – Luke

+0

是的,我注意到他們應該在他們以前的問題中使用帶有屬性的視圖模型。 –