Laravel 8 File Upload Tutorial

Laravel 8 file upload with validation; This tutorial will how to upload files into DB and storage in laravel 8 app with validation.

As well as how to validate file before upload or store into db and storage directory in laravel.

And you will learn step by step on how to upload file in laravel 8 with validation. Also, using this tutorial, you can also upload pdf, txt, csv, excel, doc files in laravel 8 app.

File Upload in Laravel 8 Example Tutorial

Use the following steps to upload files into laravel 8 apps with validation; as follows:

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

Step 1 – Download Laravel 8 Application

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

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

Step 2 – Database Configuration

In this step, setup database with your downloded/installed laravel 8 app. So, you need to find .env file and setup database details as following:

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 File 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 routes direcotry. And update the following routes into web.php file:

use App\Http\Controllers\FileUploadController;

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

Step 5 – Build File Upload Controller By Artisan Command

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

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 8');

    }
}

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

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

Step 6 – Create File Upload Form

Now, create file upload form in blade view file for display file upload form and submit 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 8 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 8 - 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 – 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

Last step, open command prompt and run the following command to start developement 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

AuthorDevendra Dode

Greetings, I'm Devendra Dode, a full-stack developer, entrepreneur, and the proud owner of Tutsmake.com. My passion lies in crafting informative tutorials and offering valuable tips to assist fellow developers on their coding journey. Within my content, I cover a spectrum of technologies, including 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. Whether you're starting out or looking for advanced examples, I provide step-by-step guides and practical demonstrations to make your learning experience seamless. Let's explore the diverse realms of coding together.

Leave a Reply

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