如何使用MVC 4从数据库显示二进制图像以编辑表单

Red*_*ddy 5 binaryfiles asp.net-mvc-4

我成功地将图像存储在数据库中作为二进制图像.我想以编辑形式显示这些图像以修改和保存更改.在Edit.cshtml表单中抛出System.OutOfMemoryException',同时显示数据库中的二进制映像.

有人可以请更正我的代码.

型号类:

public class Accommodation
    {
        [Key]
        public string A_Unique_Id { get; set; }

        public byte[] Picture1 { get; set; }

        public byte[] Picture2 { get; set; }

        public byte[] Picture3 { get; set; }


  }
Run Code Online (Sandbox Code Playgroud)

// GET:/ Accommodation/Edit/5

public ActionResult Edit(string id)
    {
        Accommodation accommodation = db.Accommodation.Find(id);
        ViewBag.SelectedAustraliaStateId = new SelectList(db.AustraliaStates, "AustraliaStateId", "AustraliaStateName", accommodation.SelectedAustraliaStateId);

        return View(accommodation);
    }
Run Code Online (Sandbox Code Playgroud)

// POST:/ Accommodation/Edit/5

[HttpPost]
public ActionResult Edit(Accommodation accommodation)
{
    if (ModelState.IsValid)
    {
        db.Entry(accommodation).State = EntityState.Modified;

        //the following line is for re-assigning back the DDL modified value.
        accommodation.State = accommodation.SelectedAustraliaStateId;

        db.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(accommodation);
}
Run Code Online (Sandbox Code Playgroud)

Edit.cshtml

<div class="editor-label">
        @Html.LabelFor(model => model.Picture1)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Picture1)
        @Html.ValidationMessageFor(model => model.Picture1)
    </div>
Run Code Online (Sandbox Code Playgroud)

错误消息:类型'System.OutOfMemoryException'的异常被抛出@Html.EditorFor(model => model.Picture1)

Nil*_*are 16

在视图中显示图像

视图

<form  method="post" enctype="multipart/form-data">
@{
    if (Model.Picture1 != null)
      {
         string imageBase64 = Convert.ToBase64String(Model.Picture1);
         string imageSrc = string.Format("data:image/gif;base64,{0}", imageBase64);
         <img src="@imageSrc" width="100" height="100" />
      }
  }
    <input type="file" name="photo" id="files" accept="image/*;capture=camera">
    <button type="button">Submit</button>
  </form>
Run Code Online (Sandbox Code Playgroud)

调节器

[HttpPost]
public ActionResult Edit(Accommodation accommodation)
{

  if (Request.Files["files"] != null)
    {
            byte[] Image;
            using (var binaryReader = new BinaryReader(Request.Files["files"].InputStream))
            {
                Image = binaryReader.ReadBytes(Request.Files["files"].ContentLength);
            }
    }
    accommodation.Picture1=Image;
  //your code to save data
}
Run Code Online (Sandbox Code Playgroud)