If you allow the users to upload profile, product, items photos, or documents and during updating file process if you are not deleting the previously uploaded file then in that case files keep getting stored and occupying space on the server.
In this tutorial, I am only covering file deletion not file upload. You can view this tutorial for file upload in Laravel.

Contents
1. File stored
I created files folder in public folder to store some files.

2. Controller
- Create
PagesControllercontroller.
php artisan make:controller PagesController
- Import
Filefor file deletion –use Illuminate\Support\Facades\File;. - Create 2 methods –
- index – Store file path in
$filesArray. Assign$filesto$data['files'].
- index – Store file path in
Load index view and pass $data Array.
-
- deleteFile – Using this method delete a file.
Read POST filepath and assign it to $filepath. Check if $filepath exists or not using File::exists().
To delete a file using –
File::delete($filepath);
Here, pass $filepath to File::delete().
If a file is successfully deleted then assign success message to Session::flash. Similarly, assign the failed message to Session::flash.
Completed Code
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\File;
use Session;
class PagesController extends Controller {
public function index() {
## Files list
$files[] = 'files/file1.jpg';
$files[] = 'files/file2.jpg';
$files[] = 'files/file3.jpg';
$files[] = 'files/file4.jpg';
$files[] = 'files/file5.jpg';
$files[] = 'files/file6.jpg';
$files[] = 'files/file7.jpg';
$files[] = 'files/file8.jpg';
$data['files'] = $files;
return view('deletefile',$data);
}
public function deleteFile(Request $request){
## Read file path
$filepath = $request->post('filepath');
## Check file exists
if (File::exists($filepath)) {
## Delete file
File::delete($filepath);
Session::flash('message','Deleted Successfully.');
Session::flash('alert-class', 'alert-success');
}else{
Session::flash('message','File not exists.');
Session::flash('alert-class', 'alert-danger');
}
return redirect('/');
}
}
3. Route
- Open
routes/web.phpfile. - Define 2 routes –
- / – Load
indexview. - /deletefile – This is POST type route to delete file.
- / – Load
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PagesController;
Route::get('/', [PagesController::class, 'index']);
Route::post('/deleteFile', [PagesController::class, 'deleteFile'])->name('deleteFile');
4. View
Create index.blade.php file in resources/views/.
Display file deletion success or failed message using Bootstrap alert if Session is been set.
Loop on $files Array to display image file preview with delete button.
For delete create <form method='post' action="{{ route('deleteFile') }}">. In the <form > create a hidden field to store file path and a submit button.
Completed Code
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>How to Delete file from public folder - Laravel 9</title>
<!-- CSS only -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.1/dist/css/bootstrap.min.css" rel="stylesheet" >
</head>
<body>
<div class="container mt-5">
<div class="row">
<!-- Alert message (start) -->
@if(Session::has('message'))
<div class="alert {{ Session::get('alert-class') }}">
{{ Session::get('message') }}
</div>
@endif
<!-- Alert message (end) -->
@foreach($files as $file)
@if(File::exists(public_path($file)))
<div class="col-md-3 mb-2">
<img src="{{ asset($file) }}" width='200px' height='200px'> <br>
<form method='post' action="{{ route('deleteFile') }}">
@csrf
<input type="hidden" name="filepath" value="{{ $file }}">
<input type="submit" class="btn btn-danger" name="btnsubmit" value="Delete">
</form>
</div>
@endif
@endforeach
</div>
</div>
</body>
</html>
5. Output
6. Conclusion
Use the above code to delete the existing files and make sure to check if file exists before executing the delete script.
In the example, I am deleting image files but you can similarly, delete other files.
If you are on Laravel 8 you can use the same code for file deletion.
If you found this tutorial helpful then don't forget to share.