如何使用带有Entity Framework的ASP.net MVC4上传/显示图像

我有这样的数据模型

public class NewsItem { public virtual int Id { get; set; } public virtual string NewsTitle { get; set; } public virtual string NewsContent { get; set; } public virtual byte[] NewsImage { get; set; } public virtual DateTime DateAdded { get; set; } public virtual bool IsLive { get; set; } } 

然后我通过View显示这些数据,如下所示:

 @model BusinessObject.Domain.NewsItem 

@Html.ValueFor(model => model.NewsTitle)

@Html.ValueFor(model => model.DateAdded)

@Html.ValueFor(model => model.NewsContent)

然后我使用控制器中的_db.SaveChanges()保存数据,如下所示:

 [Authorize] [HttpPost] public ActionResult Create(CreateNewsViewModel input) { if (ModelState.IsValid) { var news = new NewsItem(); news.NewsTitle = input.nTitle; news.NewsContent = input.nContent; news.DateAdded = input.nDateAdded; news.IsLive = input.nIsLive; Mydb data = new Mydb(); data.NewsItems.Add(news); data.SaveChanges(); return View("Index", data.NewsItems); } else { return View(input); } } 

目前我没有图片上传位。 我怎么会这样呢? 在我的数据库中,我有一个二进制字段,我的对象中的数据类型是byte []。 但我不知道我需要在哪里处理图片上传?

我是否需要一个单独的动作来返回视图? 关于这一点的一些指示将是宏伟的。

干杯

您需要从View和WebImage的实例上传类型file的输入字段来处理上传的图像:

视图:

  

控制器:

 WebImage image = WebImage.GetImageFromRequest(); byte[] toPutInDb = WebImage.GetBytes(); // ... put the byte array into the database 

要显示数据库中的图像,您需要一个控制器Action,它从数据库中检索字节数组并返回FileAction。 您可以通过在从数据库检索的bytearray上实例化另一个WebImage实例来获取此图像(用于图像检索控制器操作):

 WebImage image = new WebImage(byteArrayFromDb); File(image.GetBytes(), "image/" + image.ImageFormat, image.FileName); 

我会这样:

在您的模型类中:

  public class NewsItem { public virtual int Id { get; set; } public virtual string NewsTitle { get; set; } public virtual string NewsContent { get; set; } public virtual string NewsImage { get; set; } //string instead of byte because you don't wanna store your whole image file in your database, but just the path of the image, and the image you will store in a folder somewhere on the server public virtual DateTime DateAdded { get; set; } public virtual bool IsLive { get; set; } } 

在你的控制器中:

 [Authorize] [HttpPost] public ActionResult Create(CreateNewsViewModel HttpPostedFileBase file)// add this { if (ModelState.IsValid) { if (file != null) { file.SaveAs(HttpContext.Server.MapPath("~/Images/") + file.FileName); car.ImagePath = file.FileName; } // the rest of the code... } else { return View(input); } } 

然后在你的意见中你应该:

上传:

  

在foreach循环中显示添加:

 @Html.DisplayFor(modelItem => item.NewsImage) 

不要忘记在Html.BeginForm添加enctype = "multipart/form-data"

我希望这会有所帮助。

看看jquery文件上传器你可以找到它的示例代码

希望这可以帮助