如何在数据库中保存多个图像?
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
(局部变量=小写开头)
我只是想把图片的路径保存在数据库中。 所以我试试这个。
我收到此错误 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
(局部变量=小写开头)