Laravel 8 Ajax Multiple Image Upload Tutorial
Ajax multiple image uploading with preview in laravel 8 app. In this tutorial, we would like to share with you how to upload multiple image using ajax with preview in laravel 8 app.
Before uploading multiple images using jQuery and ajax into DB and folder in laravel 8 app, will display the preview of multiple images using jQuery. And Also, validate image mime type, size, height, width on the server side.
Multiple image upload using ajax in laravel 8 app is very basic requirement of every laravel project.
So, In this tutorial, you will learn how to upload multiple image using jQuery and ajax with preview in laravel 8 App.
Laravel 8 Ajax Multiple Image Upload with Preview Tutorial
- Step 1 – Install Laravel 8 Application
- Step 2 – Database Configuration
- Step 3 – Build Photo Model & Migration
- Step 4 – Create Routes
- Step 5 – Generate Controller using Artisan Command
- Step 6 – Create an Ajax Form to Upload Multiple Image
- Step 7 – jQuery Code To Show Multiple Image Preview
- Step 8 – Write Ajax Code to Upload Multiple Image
- Step 9 – Start Development Server
Step 1 – Install Laravel 8 Application
In step 1, open your terminal and navigate to your local web server directory using the following command:
//for windows user
cd xampp/htdocs
//for ubuntu user
cd var/www/html
Then install laravel 8 latest application using the following command:
composer create-project --prefer-dist laravel/laravel blog
Step 2 – Database Configuration
In step 2, open your downloaded laravel 8 app into any text editor. Then find .env file and configure database detail like following:
1 2 3 4 5 6 | DB_CONNECTION=mysqlDB_HOST=127.0.0.1DB_PORT=3306DB_DATABASE=db nameDB_USERNAME=db user nameDB_PASSWORD=db password |
Step 3 – Build Model & Migration
In this step, use the below given command to create phtoto migration and model file.
First of all, navigate to project by using the following command:
cd / blog
Then create model and migration file by using the following command:
php artisan make:model Photo -m
The above command will create two files into your laravel 8 multiple image upload with validation tutorial app, which is located inside the following locations:
- blog/app/Models/Photo.php
- blog/database/migrations/create_photos_table.php
So, find create_photos_table.php file inside blog/database/migrations/ directory. Then open this file and add the following code into function up() on this file:
1 2 3 4 5 6 7 8 9 | public function up(){ Schema::create('photos', function (Blueprint $table) { $table->id(); $table->string('title'); $table->string('path'); $table->timestamps(); });} |
Now, open again your terminal and type the following command on cmd to create tables into your selected database:
php artisan migrate
Step 4 – Create Routes
In this step, open your web.php file, so navigate inside routes directory. Then update the following routes into the web.php file:
1 2 3 4 5 | use App\Http\Controllers\AjaxUploadMultipleImageController;Route::get('multiple-image-preview', [AjaxUploadMultipleImageController::class, 'index']);Route::post('upload-multiple-image-ajax', [AjaxUploadMultipleImageController::class, 'saveUpload']); |
Step 5 – Create Controller using Artisan Command
In this step, use the below given php artisan command to create controller:
php artisan make:controller AjaxUploadMultipleImageController
The above command will create AjaxUploadMultipleImageController.php file, which is located inside blog/app/Http/Controllers/ directory.
So open UploadImagesController.php file and add 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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | <?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;use App\Models\Photo;class AjaxUploadMultipleImageController extends Controller{ public function index() { return view('multiple-image-upload-preview-ajax'); } public function saveUpload(Request $request) { $validatedData = $request->validate([ 'images' => 'required', 'images.*' => 'mimes:jpg,png,jpeg,gif,svg' ]); if($request->TotalImages > 0) { for ($x = 0; $x < $request->TotalImages; $x++) { if ($request->hasFile('images'.$x)) { $file = $request->file('images'.$x); $path = $file->store('public/images'); $name = $file->getClientOriginalName(); $insert[$x]['name'] = $name; $insert[$x]['path'] = $path; } } Photo::insert($insert); return response()->json(['success'=>'Multiple Image has been uploaded into db and storage directory']); } else { return response()->json(["message" => "Please try again."]); } } } |
Step 6 – Create an Ajax Form to Upload Multiple Image
In step this, Go to resources/views directory. And then create a new blade view file named multiple-image-upload-preview-ajax.blade.php inside this directory.
So, open this multiple-image-upload-preview-ajax.blade.php file in text editor 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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | <!DOCTYPE html><html><head><title>Laravel 8 Multiple Image Upload AJAX With Preview - 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"><style>.show-multiple-image-preview img{padding: 6px;max-width: 100px;}</style></head><body><div class="container mt-5"><h2 class="text-center">Laravel 8 Ajax Multiple Image Upload With Preview - Tutsmake.com</h2><div class="text-center"><form id="multiple-image-preview-ajax" method="POST" action="javascript:void(0)" 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="images[]" id="images" placeholder="Choose images" multiple ></div>@error('images')<div class="alert alert-danger mt-1 mb-1">{{ $message }}</div>@enderror</div><div class="col-md-12"><div class="mt-1 text-center"><div class="show-multiple-image-preview"> </div></div> </div><div class="col-md-12"><button type="submit" class="btn btn-primary" id="submit">Submit</button></div></div> </form></div></div> <script type="text/javascript">$(document).ready(function (e) {$.ajaxSetup({headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')}});$(function() {// Multiple images preview with JavaScriptvar ShowMultipleImagePreview = function(input, imgPreviewPlaceholder) {if (input.files) {var filesAmount = input.files.length;for (i = 0; i < filesAmount; i++) {var reader = new FileReader();reader.onload = function(event) {$($.parseHTML('<img>')).attr('src', event.target.result).appendTo(imgPreviewPlaceholder);}reader.readAsDataURL(input.files[i]);}}};$('#images').on('change', function() {ShowMultipleImagePreview(this, 'div.show-multiple-image-preview');});}); $('#multiple-image-preview-ajax').submit(function(e) {e.preventDefault();var formData = new FormData(this);let TotalImages = $('#images')[0].files.length; //Total Imageslet images = $('#images')[0];for (let i = 0; i < TotalImages; i++) {formData.append('images' + i, images.files[i]);}formData.append('TotalImages', TotalImages);$.ajax({type:'POST',url: "{{ url('upload-multiple-image-ajax')}}",data: formData,cache:false,contentType: false,processData: false,success: (data) => {this.reset();alert('Images has been uploaded using jQuery ajax with preview');$('.show-multiple-image-preview').html("")},error: function(data){console.log(data);}});});});</script></body></html> |
Step 7 – jQuery Code To Show Multiple Image Preview
In this step, implement the jQuery code to display or show multiple image preview before upload using ajax in laravel 8:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | $(function() {// Multiple images preview with JavaScriptvar ShowMultipleImagePreview = function(input, imgPreviewPlaceholder) {if (input.files) {var filesAmount = input.files.length;for (i = 0; i < filesAmount; i++) {var reader = new FileReader();reader.onload = function(event) {$($.parseHTML('<img>')).attr('src', event.target.result).appendTo(imgPreviewPlaceholder);}reader.readAsDataURL(input.files[i]);}}};$('#images').on('change', function() {ShowMultipleImagePreview(this, 'div.show-multiple-image-preview');});}); |
Step 8 – Write Ajax Code to Upload Multiple Image
In this step, implement the jQuery and ajax code will upload multiple image on laravel 8 controller file:
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 | $('#multiple-image-preview-ajax').submit(function(e) {e.preventDefault();var formData = new FormData(this);let TotalImages = $('#images')[0].files.length; //Total Imageslet images = $('#images')[0];for (let i = 0; i < TotalImages; i++) {formData.append('images' + i, images.files[i]);}formData.append('TotalImages', TotalImages);$.ajax({type:'POST',url: "{{ url('upload-multiple-image-ajax')}}",data: formData,cache:false,contentType: false,processData: false,success: (data) => {this.reset();alert('Images has been uploaded using jQuery ajax with preview');$('.show-multiple-image-preview').html("")},error: function(data){console.log(data);}});}); |
Step 9 – Start Development Server
In this step, run the following command on cmd to start the development server:
php artisan serve
Then start this app on browser, so open your browser and fire the following url into browser:
http://127.0.0.1:8000/multiple-image-preview

0 comments:
Post a Comment
Thanks