2016-12-18 46 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

是的,我注意到他们应该在他们以前的问题中使用带有属性的视图模型。 –