Laravel 9 file upload with validation; Through this tutorial, we will learn how to upload files into MySQL database and storage with validation in laravel 9 apps.
How to Upload File in Laravel 9 with Validation
Use the following steps to upload files into laravel 9 apps with validation; as follows:
- Step 1 – Download Laravel 9 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 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 LaravelFileUpload
Step 2 – Database Configuration
In this step, setup database with your downloded/installed laravel 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'); } }
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 9 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 9 - 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
I enjoyed your tutorial and I’m inspired as a result. I hope that I find my feet in web development.