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

后端 未结 3 1584
攒了一身酷
攒了一身酷 2020-12-09 17:51

I am working on a small blog using ASP.NET Core(MVC 6) EF Visual Studio. I have trouble finding how to save images to a database. I have read about IFormfile bu

相关标签:
3条回答
  • 2020-12-09 18:23

    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;
    
    0 讨论(0)
  • 2020-12-09 18:29

    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

    0 讨论(0)
  • 2020-12-09 18:37

    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)" />
    }
    
    0 讨论(0)
提交回复
热议问题