无法使用MVC 4将图像保存到数据库 [英] Cannot save an image to a Database using MVC 4
本文介绍了无法使用MVC 4将图像保存到数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试将图像保存到数据库但它没有拾取图像,我把它定义为byte [],这是我的模型
I am trying to save images to a database but it is not picking up the image, I have it defined as byte[], here is my model
namespace ShoppingCart.Models
{
public class Image
{
public int ImageId { get; set; }
public int ItemId { get; set; }
public string name { get; set; }
public byte[] Images { get; set; }
public virtual Item Item { get; set; }
}
}
这是控制器
Here is the controller
namespace ShoppingCart.Controllers
{
public class ImageController : Controller
{
private ShoppingCartContext db = new ShoppingCartContext();
//
// GET: /Image/
public ActionResult Index()
{
var images = db.Images.Include(i => i.Item);
return View(images.ToList());
}
//
// GET: /Image/Details/5
public ActionResult Details(int id = 0)
{
Image image = db.Images.Find(id);
if (image == null)
{
return HttpNotFound();
}
return View(image);
}
//
// GET: /Image/Create
public ActionResult Create()
{
ViewBag.ItemId = new SelectList(db.Items, "ItemID", "Title");
return View();
}
//
// POST: /Image/Create
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Image image)
{
if (ModelState.IsValid)
{
db.Images.Add(image);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.ItemId = new SelectList(db.Items, "ItemID", "Title", image.ItemId);
return View(image);
}
//
// GET: /Image/Edit/5
public ActionResult Edit(int id = 0)
{
Image image = db.Images.Find(id);
if (image == null)
{
return HttpNotFound();
}
ViewBag.ItemId = new SelectList(db.Items, "ItemID", "Title", image.ItemId);
return View(image);
}
//
// POST: /Image/Edit/5
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(Image image)
{
if (ModelState.IsValid)
{
db.Entry(image).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.ItemId = new SelectList(db.Items, "ItemID", "Title", image.ItemId);
return View(image);
}
[HttpPost]
public ActionResult UploadImages(HttpPostedFileBase[] uploadImages)
{
if (uploadImages.Count() <= 1)
{
return RedirectToAction("Index");
}
foreach (var image in uploadImages)
{
if (image.ContentLength > 0)
{
byte[] imageData = null;
using (var binaryReader = new BinaryReader(image.InputStream))
{
imageData = binaryReader.ReadBytes(image.ContentLength);
}
var headerImage = new Image
{
Images = imageData,
name = image.FileName,
};
db.Entry(headerImage).State = EntityState.Modified;
db.SaveChanges();
}
}
return RedirectToAction("Index");
}
//
// GET: /Image/Delete/5
public ActionResult Delete(int id = 0)
{
Image image = db.Images.Find(id);
if (image == null)
{
return HttpNotFound();
}
return View(image);
}
//
// POST: /Image/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(int id)
{
Image image = db.Images.Find(id);
db.Images.Remove(image);
db.SaveChanges();
return RedirectToAction("Index");
}
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
}
}
这是我的观点:
and this is my view:
@model ShoppingCart.Models.Image
@{
ViewBag.Title = "Edit";
}
<h2>Edit</h2>
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend>Image</legend>
@Html.HiddenFor(model => model.ImageId)
<div class="editor-label">
@Html.LabelFor(model => model.ItemId, "Item")
</div>
<div class="editor-field">
@Html.DropDownList("ItemId", String.Empty)
@Html.ValidationMessageFor(model => model.ItemId)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.name)
@Html.ValidationMessageFor(model => model.name)
</div>
<div class="editor-field">
<span class="span4">
<input type="file" name="Images" multiple="multiple" class="input-files"/>
</span>
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
推荐答案
您是否看过本文中的示例?
使用EF和ASP.NET在SQL Server中存储图像 [ ^ ]
它包含一个ASP.NET MVC 4示例项目和一个ASP.NET WebForms示例项目。
Have you seen the example in this article?
Storing images in SQL Server using EF and ASP.NET[^]
It contains a ASP.NET MVC 4 Example project and a ASP.NET WebForms example project.
这篇关于无法使用MVC 4将图像保存到数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文