Site icon phpforever – Full-Stack & AI Engineering Insights

Laravel Multiple File Upload with Progress Bar.

Multiple File Upload with Progress Bar

Multiple File Upload with Progress Bar

In this tutorial we will learn how to upload multiple images with progress bar in Laravel. A progress bar shows how much time is remaining to upload a file.

When too many files to upload , it takes time to upload on a server. Meanwhile, we can display progress bar so that end user can know how much time is remaining to upload a file.

So in this tutorial we will create file multiple file upload with progress bar.

Step 1 : Add Below Route.
Route::get('image','ImageController@index');

Route::post('multiple_image','ImageController@uploadMultiple');
Step 2 : Create Controller And Add Below Code.
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ImageController extends Controller
{
    public function index(){
         return view('image');
    }

    public function uploadMultiple(Request $request){

        foreach($request->file('image') as $image) {
             $new_name = rand() . '.' . $image->getClientOriginalExtension();
             $image->move(public_path('upload'), $new_name);            
        }
        $res = array(
         'success'  => 'Multiple Image File Has Been uploaded Successfully'
        );
         return response()->json($res);
    }
}
Step 3 : Create View And Add Below Code.
<!DOCTYPE html>
<html lang="en">
<head>
  <title>Image Validation In Laravel</title>
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">  
   <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
   <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.1/js/bootstrap.min.js"></script>
</head>
<body>

<h3 class="text-success" align="center">Multiple Image Upload In Laravel</h3><br>
<div class="container">    
  <div class="panel-group">
           
    <div class="panel panel-primary">
     <div class="panel-heading">Image Validation In Laravel</div>
            <form action="{{ url('multiple_image') }}" method="post" enctype="multipart/form-data">   
            @csrf      
                <div class="panel-body">                 
                    <div class="form-group">
                        <label class="control-label col-sm-2">Select Image:</label>
                        <div class="col-sm-5">
                          <input type="file"  name="image[]" multiple>
                        </div>
                    </div>
                  <br><br>
                    <button class="btn btn-success" type="submit" style='margin-left:20%'>Upload Image</button>
            </div>
            <div class="progress">
                <div class="progress-bar" aria-valuenow="" aria-valuemin="0" aria-valuemax="100" style="width: 0%">
                    0%
                </div>
            </div>
            <div id="success" class="row"></div>
        </form>
      </div>
    </div>
</div>
<script>
$(document).ready(function(){
    $('form').ajaxForm({
        beforeSend:function(){
            $('#success').empty();
            $('.progress-bar').text('0%');
            $('.progress-bar').css('width', '0%');
        },
        uploadProgress:function(event, position, total, percentComplete){
            $('.progress-bar').text(percentComplete + '0%');
            $('.progress-bar').css('width', percentComplete + '0%');
        },
        success:function(data)
        {
            if(data.success)
            {
                $('#success').html('<div class="text-success text-center"><b>'+data.success+'</b></div><br /><br />');
                $('#success').append(data.image);
                $('.progress-bar').text('Uploaded');
                $('.progress-bar').css('width', '100%');
            }
        }
    });
});
</script>
</body>
</html>

Exit mobile version