How to save Images to database using ASP.NET Core? How to save Images to database using ASP.NET Core? database database

How to save Images to database using ASP.NET Core?


You may find this useful if u need to save to database. This was a modification of https://www.mikesdotnetting.com/article/259/asp-net-mvc-5-with-ef-6-working-with-files and lots of input from k7Boys answer here MVC 6 HttpPostedFileBase?

<input type="file" name="Image" id="Imageinput">

Blog Modal Class should have Img field like;

    public int BlogId{ get; set; }    ...    public byte[] Img{ get; set; }

Controller;

    public async Task<IActionResult> Create([Bind("BlogId,...Img")] Blog blog t, IFormFile Image)    if (ModelState.IsValid)        {            if (Image!= null)            {                if (Image.Length > 0)                //Convert Image to byte and save to database                {                    byte[] p1 = null;                    using (var fs1 = Image.OpenReadStream())                    using (var ms1 = new MemoryStream())                    {                        fs1.CopyTo(ms1);                        p1 = ms1.ToArray();                    }                    Blog.Img= p1;                }            }            _context.Add(client);            await _context.SaveChangesAsync();            return RedirectToAction("Index");        }

Took me a couple of hours to get here. Now working on viewing the images in a view, am sure this will not be complex. Enjoy


Try this its working fine

controller

[HttpPost][ValidateAntiForgeryToken]public async Task<IActionResult> Create([Bind("Id,PostMode,Message,Image,AccountId,Created,Status")] Post post, IFormFile Image){    if (ModelState.IsValid)    {        using (var ms = new MemoryStream())        {             Image.CopyTo(ms);             post.Image = ms.ToArray();        }        _context.Add(post);        await _context.SaveChangesAsync();        return RedirectToAction(nameof(Index));    }    return View(post);}

Display Image

@foreach (var item in Model){    <img class="img-responsive full-width" src="data:image/jpeg;base64,@Convert.ToBase64String(item.Image)" />}


You can use IFormFile to save image posted from view. Below is the sample code.

public class UserProfileViewModel    {        public string UserName { get; set; }        public IFormFile UploadedImage { get; set; }        public string ImageUrl { get; set; }    }

In view simply bind it with IFormFile property like:

<img src="@Model.ImageUrl" alt="User Logo" asp-append-version="true" /><input type="file" asp-for="UploadedImage" />

In your controller you just need to save file on server like:

var filename = ContentDispositionHeaderValue                                    .Parse(user.UploadedImage.ContentDisposition)                                    .FileName                                    .Trim('"');                    filename = Path.Combine(webRoot, "/Content/UserProfile/", $@"\{filename}");                    if (Directory.Exists(webRoot + "/Content/UserProfile/"))                    {                        using (FileStream fs = System.IO.File.Create(filename))                        {                            user.UploadedImage.CopyTo(fs);                            fs.Flush();                        }                    }model.ImageURL = "~/Content/Brands/" + user.UploadedImage.FileName;