How to upload multiple files in asp.net core

As.Net core

in this session, we will discuss how to upload multiple files in asp.net core with file upload controller step by step

Create ASP.NET Core  Project: open Visual Studio, create a new ASP.NET Core  project

Select Empty Template on next screen and Click Ok button to Finish

Add Configurations: Open Startup.cs file in your project and add new configurations as given below:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;

namespace SampleHtml
{
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseStaticFiles();

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Product}/{action=Index}/{id?}");
            });

        }
    }
}

UseStaticFiles(): In asp.net core by default directory for store static files (CSS files, js files, images )in wwwroot and default asp.net core applications will not serve(accessing ) static file for that we will use UsestaticFiles()middleware is required and for accessing default file(HTML files) we need UseDefaultFile() middleware is required Readmore about asp.net core middlewares.

Add a business model class(Entities Class): Create a new folder named as Models. In the Models folder, you will create new entities class as below(name as a like product):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace SampleHtml.Models
{
    public class Product
    {
        public string Id { get; set; }
        public string Name { get; set; }
        public double Price { get; set; }
        public List<string> Photos { get; set; }
    }
}

Add Controller: Create a new folder named Controllers in your project. In this folder, create a new controller named ProductController.cs as given below:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using SampleHtml.Models;

namespace SampleHtml.controlles
{
    [Route("Product")]
    public class ProductController : Controller
    {
        [Route("")]
        [Route("index")]
        [Route("~/")]
        public IActionResult Index()
        {
            return View("Index", new Product());
        }
        private IHostingEnvironment ihostingEnvironment;

        public ProductController(IHostingEnvironment _ihostingEnvironment)
        {
            this.ihostingEnvironment = _ihostingEnvironment;
        }

        [Route("save")]
        [HttpPost]
        public IActionResult Save(Product product, IFormFile[] photos)
        {
            if (photos == null || photos.Length == 0)
            {
                return Content("File(s) not selected");
            }
            else
            {
                product.Photos = new List<string>();
                foreach (IFormFile photo in photos)
                {
                    var path = Path.Combine(this.ihostingEnvironment.WebRootPath, "images", photo.FileName);
                    var stream = new FileStream(path, FileMode.Create);
                    photo.CopyToAsync(stream);
                    product.Photos.Add(photo.FileName);
                }
            }
            ViewBag.product = product;
            return View("Success");
        }
    }
}

Add View: Add a new folder named Views. In this folder, add a new folder named Product and add new views as given below:

@model SampleHtml.Models.Product
<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
    <link rel="stylesheet" href="https://tutorialshelper.com/demo/Css/dynamictable.css">
</head>
<body>
    <h1>How to upload multiple files in asp.net core</h1>
    <form asp-controller="product" asp-action="save" method="post" enctype="multipart/form-data">
        <table class="table blueTable" cellpadding="2" cellspacing="2">
            <tr>
                <td>Id</td>
                <td>
                    <input type="text" asp-for="Id" />
                </td>
            </tr>
            <tr>
                <td>Name</td>
                <td>
                    <input type="text" asp-for="Name" />
                </td>
            </tr>
            <tr>
                <td>Price</td>
                <td>
                    <input type="text" asp-for="Price" />
                </td>
            </tr>
            <tr>
                <td>Photo</td>
                <td>
                    <input type="file" name="photos" multiple="multiple" />
                </td>
            </tr>
            <tr>
                <td> </td>
                <td><input type="submit" value="Save" /></td>
            </tr>
        </table>
    </form>
</body>
</html>

Add Success Page: In Product folder, create a new view name as like  Success.cshtml as given below:

@page
@model SampleHtml.Views.Product.SuccessModel
@{
}
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Success</title>
    <link rel="stylesheet" href="https://tutorialshelper.com/demo/Css/dynamictable.css">
</head>
<body>

    <h1>How to upload multiple files in asp.net core</h1>
    <table class="table blueTable" cellpadding="2" cellspacing="2" border="1">
        <tr>
            <td>Id</td>
            <td>@ViewBag.product.Id</td>
        </tr>
        <tr>
            <td>Name</td>
            <td>@ViewBag.product.Name</td>
        </tr>
        <tr>
            <td>Price</td>
            <td>@ViewBag.product.Price</td>
        </tr>
        <tr>
            <td>Photo(s)</td>
            <td>
                @foreach (var photo in ViewBag.product.Photos)
                {
                    <img src="~/images/@photo" width="120" />
                }
            </td>
        </tr>
    </table>
</body>
</html>

Add _ViewImports.cshtml page: Select Razor View Imports item and click Add button to Finish and Add Inside  _ViewImports.cshtml file and TagHelpers library as given below:

_ViewImports.cshtml page:

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

Structure of your project look like given below:

Run Your project: you will Access Product action in Production controller with the following URL: http://localhost:44370/Demo/Index see the given below output

How to upload multiple files in asp.net core

Like
Like Love Haha Wow Sad Angry
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x