从ASP.NET MVC将图像上载到SQL数据库

时间:2014-04-08 17:46:16

标签: c# asp.net-mvc asp.net-mvc-5

我正在尝试使用ASP.NET MVC将图像上传到SQL数据库。数据库BeforeImage保持为空,尽管我没有收到任何错误的文件大小和格式。感谢

 public class Job
 {
    public int ID { get; set; }
    public byte[] BeforeImage { get; set; }
    public byte[] AfterImage { get; set; }
  }

查看型号:

public class BeforePhotoVM
{
    public int ID { get; set; }
    public HttpPostedFileBase BeforeImage { get; set; }
}

得到:

 public ActionResult AddBefore(int? id)
 {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }

        var job = db.Jobs.Find(id);
        var BeforeVM = new BeforePhotoVM();

        //vm = db.Jobs.Find(id);
        return View("Job2", BeforeVM);
}

发表:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult AddBefore([Bind(Include = "ID,BeforeImage")] BeforePhotoVM BeforeVM)
{
    var job = db.Jobs.Find(BeforeVM.ID);

    if (ModelState.IsValid)
    {
       byte[] BeforeImage = new byte[BeforeVM.BeforeImage.InputStream.Length];
       BeforeVM.BeforeImage.InputStream.Read(BeforeImage, 0, BeforeImage.Length);

       job.BeforeImage = BeforeImage;

       db.Entry(job).State = EntityState.Modified;
       db.SaveChanges();

       return RedirectToAction("AddBefore", new { id = job.ID });
    }

    return View("Job");
}

1 个答案:

答案 0 :(得分:0)

看,你做的事太多了,应该很简单。 另外,下次使用你的ajax发布你的html代码。

让我试着帮助你。

在您的asp.net页面上。

你的Html.Begin表单应该有enctype =" multipart / form-data"

像这样

@using (Ajax.BeginForm("Here goes ur action", "Here goes ur controller", new AjaxOptions { OnSuccess = "something with sucess" }, new { enctype = "multipart/form-data" }))
考虑到这一点 让我们到你的模型

public byte[] Photo { get; set; }

好的......现在让我们完成控制器

        public ActionResult Cadastro(YOURMODEL _model, HttpPostedFileBase file)
    {
        _model.Photo = new byte[file.ContentLength];

看,你的控制器收了HttpPostedFileBase,你可以访问创建一个新的字节..但是记住..在你的asp.net代码中,文件名必须与你的控制器相同,如下所示

剩下的就是你 希望这会对你有所帮助。