使用ASP.NET MVC将图像保存到数据库
我正在尝试使用Create方法将图像保存到数据库。 但尝试此代码时,我收到此错误:
输入不是有效的Base-64字符串,因为它包含非基本64个字符,两个以上的填充字符或填充字符中的非空白字符。*
我是MVC的初学者。 我将非常感谢您的回复,非常感谢您提前。
[Authorize] [HttpPost] public ActionResult Create(Customers saveCustomer) { try { // TODO: Add insert logic here var upload = Request.Files["ImageData"]; if (upload.ContentLength > 0) { string savedFileName = Path.Combine( ConfigurationManager.AppSettings["FileUploadDirectory"], "customers_" + saveCustomer.FirstName + "_" + saveCustomer.LastName + ".jpg"); upload.SaveAs(savedFileName); } _db.Customers.InsertOnSubmit(saveCustomer); _db.SubmitChanges(); return RedirectToAction("Index"); } catch { return View(); } }
这是我的创建视图代码:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %> Create Create
Web.config文件:
数据库输入:
Column Name Data Type Allow Nulls ImageData image yes
试试这个:
string savedFileName = Server.MapPath("/Resources/images/customers/" + "customers_" + saveCustomer.FirstName + "_" + saveCustomer.LastName + ".jpg");
代替
string savedFileName = Path.Combine( ConfigurationManager.AppSettings["FileUploadDirectory"], "customers_" + saveCustomer.FirstName + "_" + saveCustomer.LastName + ".jpg");
-
如果您的客户模型包含图像字段,则无需保存到服务器端目录。
-
表单post不应该有上传文件字段,请将Controller更改为:
================================
[Authorize] [HttpPost] public ActionResult Create([Bind(Exclude = "ImageData")]Customers saveCustomer, HttpPostedFileBase ImageData) { try { // TODO: Add insert logic here var upload = Request.Files["ImageData"]; string savedFileName = ""; //string for saving the image server-side path if (upload.ContentLength > 0) { savedFileName = Server.MapPath("/Resources/images/customers/" + "customer_" + saveCustomer.FirstName + "_" + saveCustomer.LastName + ".jpg"); //get the server-side path for store image upload.SaveAs(savedFileName); //*save the image to server-side } var index = savedFileName.IndexOf(@"\Resources\"); saveCustomer.ImageData = savedFileName.Substring(index, savedFileName.Length - index); //set the string of image server-side path to add-object _db.Customers.InsertOnSubmit(saveCustomer); // save all field to databae (includes image server-side path) _db.SubmitChanges(); // save database changes return RedirectToAction("Index"); } catch { return View(); } }
private byte[] ImageToBytes(Image img, ImageFormat format) { MemoryStream mstream = new MemoryStream(); img.Save(mstream, format); mstream.Flush(); return mstream.ToArray(); }