如何在数据库中保存多个图像?

时间:2016-05-01 19:55:44

标签: asp.net asp.net-mvc razor httppostedfilebase

我只想保存数据库中图像的路径。 所以我试试这个。

我得到此错误System.NullReferenceException:对象引用未设置为对象的实例。

这是我的控制器

public ActionResult SaveImages(IEnumerable<HttpPostedFileBase> img, Imagenes images)
    {
        foreach (var n in img)
        {
            var PhotoUrl = Server.MapPath("/images" + n.FileName);
            if (n != null && n.ContentLength > 0)
                n.SaveAs(PhotoUrl);
            images.imgUrl = "/images" + n.FileName;

            db.Imagenes.Add(images);
            db.SaveChanges();
        }
        return View("Index");

    }

这是我的模特课

    public partial class Imagenes
{
    public int id { get; set; }

    [StringLength(200)]
    public string imgUrl { get; set; }
}

我的观点

@{
ViewBag.Title = "Home Page";}

@using (Html.BeginForm("SaveImages", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div>
    <input type="file" name="img" id="img" multiple />
    <input type="submit" name="submit" value="Save"/>
</div>}

1 个答案:

答案 0 :(得分:2)

您获得的错误与图像保存部分无关,但我假设它是使用您的images属性...

由于您没有指定该属性的来源,MVC会自动假定它是一个POST变量,而在HTML中,您没有任何排序......

将您的操作代码更改为:

public ActionResult SaveImages(IEnumerable<HttpPostedFileBase> img)
{
    const string folderToUpload = "/images";

    foreach (var n in img)
    {
        var imageToUpload = folderToUpload + n.FileName;
        var photoUrl = Server.MapPath(imageToUpload);

        if (n != null && n.ContentLength > 0) {

            n.SaveAs(photoUrl);      // save to folder

            var images = new Imagenes {
               imgUrl = imageToUpload
            };

            db.Imagenes.Add(images); // add to repository
            db.SaveChanges();        // save repositorychanges
        }
    }

    return redirectToAction("Index");
}

我还假设db已经在你的构造函数中注入了,而且它不是NULL

编辑代码:

  • 创建一个常量变量以使文件夹上传,因此不要一遍又一遍地重复该代码
  • 创建一个变量来保存图像的完整路径,这样就不会一遍又一遍地重复那些代码(记住:DRY - 不要重复自己)

  • 仅在文件保存时保存到数据库

  • 创建一个新变量来保存要保存的对象
  • 使用redirectToAction重定向到该操作,因为您可能在Index中进行了一些调用,只有重定向到视图才会出现错误
  • 要保持持久性,请将PhotoUrl更改为photoUrl(局部变量=以小写字母开头)