无法使用MVC 4将图像保存到数据库 [英] Cannot save an image to a Database using MVC 4

查看:57
本文介绍了无法使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆