Dropzone is a Javascript library that allows uploading files by drag and drop.
To load existing files on dropzone need to send an AJAX request while Dropzone initialization.
In this tutorial, I show how you can display existing files in the Dropzone container in Laravel 8.

Contents
1. Download
- Download Dropzone library from here
- Extract the downloaded file in
public/folder. - Or you can use CDN –
<!-- CSS --> <link rel="stylesheet" href="https://unpkg.com/dropzone@5/dist/min/dropzone.min.css" type="text/css" /> <!-- Script --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="https://unpkg.com/dropzone@5/dist/min/dropzone.min.js"></script>
- Using jQuery library to send AJAX requests.
2. Controller
- Create
PageControllerController.
php artisan make:controller PageController
- Open
app/Http/Controllers/PageController.phpfile. - Create 3 methods –
- index – Load
indexview. - uploadFile – Using this method to upload the selected file from Dropzone.
- index – Load
Define file validation. If file is validated successfully then upload the file and assign 1 to $data['success'] otherwise 0 to $data['success'].
Return $data Array in JSON format.
-
- readFiles – Using this method to return files list to display in the Dropzone.
Specify reading location in $directory. Create $files_info Array to store files list.
In the $file_ext Array specify extensions (It is same as the defined extensions list in uploadFile() validation) that need to display on the Dropzone.
Loop on the folder to read files. If file extension exists in $file_ext Array and file size is <= 2 (It is same as the defined max file size in uploadFile() validation) then initialize $files_info Array with name, file size, and path.
Return $files_info Array in JSON format.
Completed Code
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use File;
class PageController extends Controller
{
public function index(){
return view('index');
}
// Upload file
public function uploadFile(Request $request){
$data = array();
$validator = Validator::make($request->all(), [
'file' => 'required|mimes:png,jpg,jpeg,pdf|max:2048'
]);
if ($validator->fails()) {
$data['success'] = 0;
$data['error'] = $validator->errors()->first('file');// Error response
}else{
if($request->file('file')) {
$file = $request->file('file');
$filename = time().'_'.$file->getClientOriginalName();
// File upload location
$location = 'uploads';
// Upload file
$file->move($location,$filename);
// Response
$data['success'] = 1;
$data['message'] = 'Uploaded Successfully!';
}else{
// Response
$data['success'] = 0;
$data['message'] = 'File not uploaded.';
}
}
return response()->json($data);
}
// Read files
public function readFiles(){
$directory = 'uploads';
$files_info = [];
$file_ext = array('png','jpg','jpeg','pdf');
// Read files
foreach (File::allFiles(public_path($directory)) as $file) {
$extension = strtolower($file->getExtension());
if(in_array($extension,$file_ext)){ // Check file extension
$filename = $file->getFilename();
$size = $file->getSize(); // Bytes
$sizeinMB = round($size / (1000 * 1024), 2);// MB
if($sizeinMB <= 2){ // Check file size is <= 2 MB
$files_info[] = array(
"name" => $filename,
"size" => $size,
"path" => url($directory.'/'.$filename)
);
}
}
}
return response()->json($files_info);
}
}
3. Route
- Open
routes/web.phpfile. - Define 3 routes –
- / – Load index view.
- readFiles – Read all files from a folder for dropzone.
- uploadFile – This is used for Dropzone file upload.
Completed Code
<?php
use App\Http\Controllers\PageController;
Route::get('/', [PageController::class, 'index']);
Route::get('readFiles', [PageController::class, 'readFiles'])->name('readFiles');
Route::post('uploadFile', [PageController::class, 'uploadFile'])->name('uploadFile');
4. View
Create index.blade.php file in resources/views/ folder.
Store CSRF token in <meta > tag and include Dropzone and jQuery library.
Dropzone Container
- Create a
<form action="{{route('uploadFile')}}" class='dropzone' >.
Script
- Read CSRF token from
<meta >tag and assign it toCSRF_TOKEN. - Set
autoDiscovertofalse. - Initialize Dropzone on
class='dropzone'. - I set
maxFilesizeto 2 andacceptedFilesto".jpeg,.jpg,.png,.pdf". - Using
initto fetch existing files list using AJAX. Send AJAX request toroute("readFiles"), set dataType: ‘json’. - On successful callback loop on the response and assign
{ name: value.name, size: value.size }inmockFile. - Using
sendingevent to send CSRF token. - Using
successevent to check return response. - If
response.status == 0means there is an error and ifresponse.status == 2means file is not uploaded. Display error message usingalert().
Completed Code
<!DOCTYPE html>
<html>
<head>
<title>How to Display existing files in Dropzone - Laravel 8</title>
<!-- Meta -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<meta name="csrf-token" content="{{ csrf_token() }}">
<!-- CSS -->
<link rel="stylesheet" href="https://unpkg.com/dropzone@5/dist/min/dropzone.min.css" type="text/css" />
<!-- Script -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="https://unpkg.com/dropzone@5/dist/min/dropzone.min.js"></script>
<style type="text/css">
.dz-preview .dz-image img{
width: 100% !important;
height: 100% !important;
object-fit: cover;
}
</style>
</head>
<body>
<div class='content'>
<!-- Dropzone -->
<form action="{{route('uploadFile')}}" class='dropzone' ></form>
</div>
<!-- Script -->
<script>
var CSRF_TOKEN = document.querySelector('meta[name="csrf-token"]').getAttribute("content");
Dropzone.autoDiscover = false;
var myDropzone = new Dropzone(".dropzone",{
maxFilesize: 2, // 2 mb
acceptedFiles: ".jpeg,.jpg,.png,.pdf",
init: function() {
myDropzone = this;
$.ajax({
url: '{{ route("readFiles") }}',
type: 'get',
dataType: 'json',
success: function(response){
$.each(response, function(key,value) {
var mockFile = { name: value.name, size: value.size };
myDropzone.emit("addedfile", mockFile);
myDropzone.emit("thumbnail", mockFile, value.path);
myDropzone.emit("complete", mockFile);
});
}
});
}
});
myDropzone.on("sending", function(file, xhr, formData) {
formData.append("_token", CSRF_TOKEN);
});
myDropzone.on("success", function(file, response) {
if(response.success == 0){ // Error
alert(response.error);
}
});
</script>
</body>
</html>
5. Output
6. Conclusion
If you are validating file then also use those values while reading folder files to display on the Dropzone.
If you found this tutorial helpful then don't forget to share.