Laravel 9 Upload Multiple Files Tutorial

To upload multiple files in laravel 9 apps with validation; Through this tutorial, we will learn how to multiple upload files in laravel 9 apps with validation.

And also, validate multiple filrd upload types like pdf, txt, CSV, excel, doc before storing into the database, and folder in laravel 9 apps.

Multiple File Upload with Validation In Laravel 9

Use the following steps to upload multiple file with validation in laravel 9 applications:

  • Step 1 – Download Laravel 9 Application
  • Step 2 – Configure Database with App
  • Step 3 – Build Model & Migration
  • Step 4 – Create Routes
  • Step 5 – Build Multi Upload Controller By Artisan Command
  • Step 6 – Create Multiple File Upload Form
  • Step 7 – Create Directory inside Storage/app/public
  • Step 8 – Run Development Server

Step 1 – Download Laravel 9 Application

First of all, download or install laravel 9 new setup. So, open terminal and type the following command to install new laravel 9 app into your machine:

composer create-project --prefer-dist laravel/laravel LaravelMultipleFileUpload

Step 2 – Configure Database with App

In this step, set up database with your downloaded/installed laravel app. So, you need to find .env file and setup database details as follows:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database-name
DB_USERNAME=database-user-name
DB_PASSWORD=database-password

Step 3 – Build Model & Migration

In this step, open again your command prompt. And run the following command on it. To create model and migration files:

php artisan make:model File -m

After that, open create_files_table.php file inside /database/migrations/ directory. And the update the function up() with following code:

    public function up()
    {
        Schema::create('files', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('path');
            $table->timestamps();
        });
    }

Then, open again command prompt and run the following command to create tables into database:

php artisan migrate

Step 4 – Create Routes

In this step, open web.php file from the routes directory. And update the following routes into web.php file:

use App\Http\Controllers\MultiFileUploadController;

Route::get('files-upload', [MultiFileUploadController::class, 'index']);
Route::post('save-multiple-files', [MultiFileUploadController::class, 'store']);

Step 5 – Build Multi Upload Controller By Artisan Command

In this step, run the following command on the command prompt to create a controller file:

php artisan make:controller MultiFileUploadController

After that, go to app/HTTP/controllers and open MultiFileUploadController.php file. And update the following code into it:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Models\File;


class MultiFileUploadController extends Controller
{
    public function index()
    {
        return view('multiple-files-upload');
    }

    public function store(Request $request)
    {
        
        $validatedData = $request->validate([
        'files' => 'required',
        'files.*' => 'mimes:csv,txt,xlx,xls,pdf'
        ]);


        if($request->hasfile('files'))
         {
            foreach($request->file('files') as $key => $file)
            {
                $path = $file->store('public/files');
                $name = $file->getClientOriginalName();

                $insert[$key]['name'] = $name;
                $insert[$key]['path'] = $path;

            }
         }

        File::insert($insert);

        return redirect('files-upload')->with('status', 'Multiple File has been uploaded Successfully');

    }
}

Note that, The below-given code will upload a file into the files directory:

$path = $request->file('file')->store('public/files');

Step 6 – Create Multiple File Upload Form

Now, create multiple file upload forms in the blade view file to display multiple file upload forms and submit them to the database.

So, Go to resources/views and create multiple-files-upload.php and update the following code into it:

<!DOCTYPE html>
<html>
<head>
  <title>Multiple File Upload in Laravel 9</title>

  <meta name="csrf-token" content="{{ csrf_token() }}">

  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">

</head>
<body>

<div class="container mt-5">

  @if(session('status'))
    <div class="alert alert-success">
        {{ session('status') }}
    </div>
  @endif


      <h2 class="text-center">Laravel 9 Multiple File Upload With Validation - Tutsmake</h2>


    <div class="text-center">

        <form name="save-multiple-files" method="POST"  action="{{ url('save-multiple-files') }}" accept-charset="utf-8" enctype="multipart/form-data">

          @csrf
                  
            <div class="row">

                <div class="col-md-12">
                    <div class="form-group">
                        <input type="file" name="files[]" placeholder="Choose files" multiple >
                    </div>
                    @error('files')
                        <div class="alert alert-danger mt-1 mb-1">{{ $message }}</div>
                    @enderror
                </div>
                  
                <div class="col-md-12">
                    <button type="submit" class="btn btn-primary" id="submit">Submit</button>
                </div>
            </div>     
        </form>

    </div>


</div>  
</body>
</html>

Note that, The below given code will display the validation error message on the blade view file:

  @error('files')
  <div class="alert alert-danger mt-1 mb-1">{{ $message }}</div>
  @enderror

Step 7 – Create Directory inside Storage/app/public

Now, create directory name files inside storage/app/public directory. Because the following line of code will upload an file into the files directory, which is located inside storage/app/public/ directory:

$path = $request->file('file')->store('public/files');

Step 8 – Run Development Server

The last step, open a command prompt and run the following command to start the development server:

php artisan serve

Then open your browser and hit the following url on it:

http://127.0.0.1:8000/files-upload

Recommended Laravel Tutorials

AuthorAdmin

My name is Devendra Dode. I am a full-stack developer, entrepreneur, and owner of Tutsmake.com. I like writing tutorials and tips that can help other developers. I share tutorials of PHP, Python, Javascript, JQuery, Laravel, Livewire, Codeigniter, Node JS, Express JS, Vue JS, Angular JS, React Js, MySQL, MongoDB, REST APIs, Windows, Xampp, Linux, Ubuntu, Amazon AWS, Composer, SEO, WordPress, SSL and Bootstrap from a starting stage. As well as demo example.

Leave a Reply

Your email address will not be published. Required fields are marked *