File Upload Validation in Laravel 10

File Upload Validation in Laravel 10

If you want to create file upload with validation functionality in Laravel 10 web applications. So, in this tutorial, you will learn how to upload file with validation in laravel 10 apps.

Laravel 10 File Upload Example Tutorial

Steps to upload file with validation in Laravel 10 apps:

  • Step 1 – Create New Laravel 10 Project
  • Step 2 – Setup Database with Laravel Project
  • Step 3 – Make a File for Model & Migration
  • Step 4 – Define Routes
  • Step 5 – Make Upload Controller By Artisan Command
  • Step 6 – Make File Upload Form
  • Step 7 – Make a Directory inside Storage/app/public
  • Step 8 – Run Development Server

Step 1 – Create New Laravel 10 Project

First of all, start your terminal to download or install Laravel 10 new setup. Run the following commands in it to install the new Laravel 10 app on your system:

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

Step 2 – Setup Database with Laravel Project

In this step, Configure your database with your apps. So, visit your app root directory and find .env file. Then configure 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 – Make a File for Model & Migration

In this step, open again your terminal/command line/ command prompt. And execute the following command into it to create model and migration files for your laravel applications:

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 – Define Routes

In this step, Visit your routes directory and open web.php file in any text editor. And add the following routes into web.php route file:

use App\Http\Controllers\FileUploadController;

Route::get('file-upload', [FileUploadController::class, 'index']);
Route::post('store', [FileUploadController::class, 'store']);

Step 5 – Make Upload Controller By Artisan Command

In this step, execute the following command on the terminal/command prompt/command line to create a controller file for your laravel applications; is as follow:

php artisan make:controller FileUploadController

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

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\File;

class FileUploadController extends Controller
{
     public function index()
    {
        return view('file-upload');
    }

    public function store(Request $request)
    {
        
        $validatedData = $request->validate([
         'file' => 'required|csv,txt,xlx,xls,pdf|max:2048',

        ]);

        $name = $request->file('file')->getClientOriginalName();

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


        $save = new File;

        $save->name = $name;
        $save->path = $path;

        return redirect('file-upload')->with('status', 'File Has been uploaded successfully in Laravel 10');

    }
}

The following line of code will upload an file into the files directory:

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

Step 6 – Make File Upload Form

Now, create a file upload form on the blade view file for the display file upload form and submit it to the database.

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

<!DOCTYPE html>
<html>
<head>
  <title>Laravel 10 File Upload Example - Tutsmake.com</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-4">

  <h2 class="text-center">File Upload in Laravel 10 - Tutsmake.com</h2>

      <form method="POST" enctype="multipart/form-data" id="upload-file" action="{{ url('store') }}" >
                
          <div class="row">

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

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

The following below code will display the validation error message on the blade view file:

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

Step 7 – Make a Directory inside Storage/app/public

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

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

Step 8 – Run Development Server

The last step, open the command prompt or terminal and execute the following command to start development server:

php artisan serve

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

http://127.0.0.1:8000/file-upload

Recommended Laravel Posts

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 *