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

how can i save more than one image in the database?

我只是想把图片的路径保存在数据库中。 所以我试试这个。

我收到此错误 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");

    }

这是我的模型class

    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>}

你得到的错误与图像保存部分无关,但我假设它是使用你的 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(局部变量=小写开头)