In this tutorial you will learn about the How to Upload File in Laravel 8 with Validation and its application with practical example.
In this Laravel file Upload with validation example, we will learn how to upload and validate file before upload in laravel. In this laravel file upload example, I’ll show you how to validate and upload file into folder and then save it into database. In this tutorial before saving file into database we will validate file and then save it into directory. Before uploading the files we will perform server side validation. After successfully file upload into the database and folder we will display success message on the screen.
How to Upload File in Laravel 8 with Validation
- 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 we need to create a fresh laravel project, download and install Laravel 8 using the below command
1 |
composer create-project --prefer-dist laravel/laravel LaravelFileUpload |
Step 2 – Database Configuration
Now, lets create a MySQL database and connect it with laravel application. After creating database we need to set database credential in application’s .env file.
1 2 3 4 5 6 |
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
Now, in this step we will create model and migration file. Please run the following command:
1 |
php artisan make:model File -m |
After that, open create_files_table.php file inside /database/migrations/ directory. And put the following code in it:
1 2 3 4 5 6 7 8 9 |
public function up() { Schema::create('files', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('path'); $table->timestamps(); }); } |
Now, in this step we will create model and migration file. Please run the following command:
1 |
php artisan migrate |
Step 4 – Create Routes
After this, we need to define routes in “routes/web.php” file. Lets open “routes/web.php” file and add the following routes in it.
routes/web.php
1 2 3 4 |
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
Now, lets create a controller named FileUploadController using command given below –
1 |
php artisan make:controller FileUploadController |
After that, go to app/http/controllers and open FileUploadController.php file. And put the following code into it:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<?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:
1 2 |
1 $path = $request->file('file')->store('public/files'); |
Step 6 – Create File Upload Form
Go to resources/views and create file-upload.blade.php and update the following code into it:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
<!DOCTYPE html> <html> <head> <title>Laravel 8 File Upload Example</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</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:
1 2 3 |
@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:
1 |
$path = $request->file('file')->store('public/files'); |
Step 8 – Run Development Server
Now we are ready to run our example so lets start the development server using following artisan command –
1 |
php artisan serve |
Now, open the following URL in browser to see the output –
1 |
http://127.0.0.1:8000/file-upload |