نحوه ذخیره تصویر در پایگاه داده و نمایش آن درView با استفاده از MVC
سه شنبه 18 مهر 1396در این مقاله قصد داریم که نحوه ذخیره عکس در پایگاه داده و نمایش آن در view در MVC 5 را با بیان یک مثال و به صورت گام به گام به شما آموزش بدهیم.
تصاویر به صورت داده باینری ذخیره میشوند و به صورت ارایه ای از BYTE ها آوزده میشوند و سپس آرایه BYTE تبدیل به رشته BASE 64 میشود و سپس در View در ASP.NET MVC 5 نمایش داده می شود.
استفاده از Entity Framework برای افزودن جدول و رشته اتصال
با استفاده از مراحل Data->ADO.NET Entity Data Model و رشته اتصال ، آن به صورت خودکار در web.config بروز میشود و جدول به صورت یک کلاس و ستون ها به صورت ویژگی نگاشت میشوند.
این جدول که برای ذخیره تصاویر و جزئیات استفاده می شود ، نوع داده ستون BinaryPhoto به صورت (Varbinary(max برای ذخیره تصویر در پایگاه داده با فرمت بایت است و نوع داده ستون PathPhoto برای ذخیره url و آدرس تصویر به صورت (nvarchar(50 است.
در index .cshtml
ما جزئیات را ارسال میکنیم و از "type=”file برای تصویر استفاده میکنیم.
<h2>Index</h2> @using (Html.BeginForm("Index", "Default", FormMethod.Post, new { enctype = "multipart/form-data" })) { <div class="container"> <table> <tr> <td style="width:250px;height:50px"><label>عکس باینری</label><input type="file" name="file1" id="file1" style="width: 100%;" /> <br /></td> <td><input style="padding:2px 48px" type="submit" value="ثبت" /></td> </tr> </table> </div> }
در اکشن متد کنترلر
testEntities db = new testEntities(); // public ActionResult Index() { return View(); } [HttpPost] public ActionResult Index(Person Details, HttpPostedFileBase File1) { if (File1 != null && File1.ContentLength > 0) { Details.image = new byte[File1.ContentLength]; File1.InputStream.Read(Details.image, 0, File1.ContentLength); string ImageName = System.IO.Path.GetFileName(File1.FileName); string physicalPath = Server.MapPath("~/img/" + ImageName); File1.SaveAs(physicalPath); Details.imagepath = "img/" + ImageName; db.Person.Add(Details); db.SaveChanges(); return PartialView("detail", db.Person); } else { //if both file1 and file2 are null then we can store others details without any image db.Person.Add(Details); db.SaveChanges(); return PartialView("detail", db.Person); } }
در detail.cshtml / برای نمایش عکس و سایر جزئیات
@model IEnumerable<ذخیره_عکس_در_پایگاه_داده.Models.Person> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <link href="~/Content/bootstrap.css" rel="stylesheet" /> </head> <body class="container" style="margin-top:50px"> <table class="table table-bordered"> <tr style="background-color:gray"> <th style="text-align:center"><h2>تصویر</h2></th> <th style="text-align:center"><h2>آدرس تصویر</h2></th> </tr> @foreach (var detail in Model) { <tr> <th style="text-align:center"> <label style="text-align:center">@detail.imagepath</label> </th> <th style="text-align:center"> @{var base64 = Convert.ToBase64String(detail.image); var imgsrc = string.Format("data:image/jpg;base64,{0}", base64); <img src='@imgsrc' style="width:100%;height:100%;max-width:150px;max-height:150px" /> } </th> </tr> } </table> </body> </html>
خروجی
در پایگاه داده به صورت زیر ذخیره میشود.
- ASP.net MVC
- 5k بازدید
- 6 تشکر