Laravel File Storage delete all files in directory
Asked Answered
U

8

38

Is there a way to delete all files in specific directory. I'm trying to clear all my files in my created folder backgrounds in storage\app\backgrounds but in docs seems no method for delete all.

Storage::delete('backgrounds\*.jpg');
Unbelieving answered 30/10, 2017 at 2:28 Comment(0)
U
57

I don't think if this is the best way to solve this. But I solved mine calling

use Illuminate\Filesystem\Filesystem;

Then initiate new instance

$file = new Filesystem;
$file->cleanDirectory('storage/app/backgrounds');
Unbelieving answered 30/10, 2017 at 3:35 Comment(0)
D
27

for Laravel >= 5.8

    use Illuminate\Support\Facades\Storage;

    // Get all files in a directory
    $files =   Storage::allFiles($dir);

    // Delete Files
    Storage::delete($files);
Doubtless answered 6/2, 2019 at 5:3 Comment(1)
It has been tried with Laravel 5.8 and it is working fine. I used it for my Task Schecduler.Guertin
H
25

Just use it.

 File::cleanDirectory($direction);
Henderson answered 26/1, 2020 at 12:40 Comment(2)
This is the way.Glynis
Note he is using the Facade 'File' (use File; or better use Illuminate\Support\Facades\File;). You can also use this in conjunction with Storage disks: File::cleanDirectory(Storage::disk('some-disk')->path(''));Villiers
U
7

You can use Filesystem method cleanDirectory

$success = Storage::cleanDirectory($directory);

Please see documentation for more information:

https://laravel.com/api/5.5/Illuminate/Filesystem/Filesystem.html#method_cleanDirectory

Unassailable answered 30/10, 2017 at 2:36 Comment(3)
Thanks for the hint cleanDirectory but does not actually solve calling those Storage::cleanDirectory giving me an error League\Flysystem\Filesystem::cleanDirectory.Meave
This method does not exist statically on the Storage facade.Bourgeon
Call to undefined method League\Flysystem\Filesystem::cleanDirectory laravel 6Pacha
A
5

In Laravel 5.8 you can use:

Storage::deleteDirectory('backgrounds');

Remember to include:

use Illuminate\Support\Facades\Storage;
Amherst answered 10/3, 2019 at 17:35 Comment(1)
Actually, this deletes the directory itself too.Inseminate
B
3

In Laravel 5.7 you can empty a directory using the Storage facade like so:

Storage::delete(Storage::files('backgrounds'));

$dirs = Storage::directories('backgrounds');

foreach ($dirs as $dir) {
    Storage::deleteDirectory($dir);
}

The delete() method can receive an array of files to delete, while deleteDirectory() deletes one directory (and its contents) at a time.

I don't think it's a good idea to delete and then re-create the directory as that can lead to unwanted race conditions.

Bourgeon answered 18/1, 2019 at 15:59 Comment(0)
M
1

I'm handling this by deleting the whole directory as I don't need it. But if, for any case, you need the directory you should be good by just recreating it:

$d = '/myDirectory'
Storage::deleteDirectory($d);
Storage::makeDirectory($d);
Morphology answered 1/10, 2018 at 15:17 Comment(0)
F
0
//You can use Illuminate\Filesystem\Filesystem and it's method cleanDirectory('path_to_directory).
For Example:
    $FolderToDelete = base_path('path_to_your_directory');
    $fs = new \Illuminate\Filesystem\Filesystem;
    $fs->cleanDirectory($FolderToDelete);   
    //For Delete All Files From  Given Directory.
    $succes = rmdir($FolderToDelete);
    //For Delete Directory
    //This Method Works for me

#Laravel 
#FileManager
#CleanDirectory
Fatalism answered 23/5, 2019 at 4:40 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.