Check if file exists with Laravel 5.5 Storage? Storage for Avatar
For future readers:
//e.g. user/hashMD5.jpg
$filename = $avatar->hashName('user');
$image = Image::make($avatar)->orientate()->fit(220);
$location = Storage::disk('images')->put($filename, (string) $image->encode());
if($location){
$user = Auth::user();
$oldfilename = $user->avatar;
$oldfileexists = Storage::disk('images')->exists( $oldfilename );
//Delete old avatar
if($oldfilename != 'user/profile.jpg' and $oldfileexists){
Storage::disk('images')->delete( $oldfilename );
}
//Save current image to database. Sollte ich nicht update benutzen?
$user->avatar = $filename;
$user->update();
}
With the filesystem.php:
'images' => [
'driver' => 'local',
'root' => storage_path('app/public/images'),
'visibility' => 'public',
],
Philipp Mochine
Philipp is a web developer and engineer, who thrives in bringing ideas to life. He has worked on engineering and software projects for various companies, whether sole proprietors or large corporations, such as BMW. With a foundation in Industrial Engineering and learning to code, Philipp has a unique talent to combine his acquired skills and knowledge in different areas and is therefore able to find a solution to various problems.
Updated on June 04, 2022Comments
-
Philipp Mochine almost 2 years
Based on this code: https://devdojo.com/episode/laravel-user-image I created the following code in order to upload an avatar and delete the old one. I'm tried to use Storage:Facade but I'm not sure if it is the right way. So let's look at my code excerpt:
use Illuminate\Support\Facades\Storage; .. $avatar = $request->file('avatar'); $filename = time() . '.' . $avatar->getClientOriginalExtension(); //Using Image intervention, storing to Public/Images/user Image::make($avatar)->orientate()->fit(220)->save( public_path('/images/user/' . $filename ) ); $user = Auth::user(); $oldavatar = $user->avatar; $user->avatar = $filename; $user->save(); //Delete old avatar if($oldavatar != 'profile.jpg' and Storage::disk('public')->exists('/images/user/' . $oldavatar );){ Storage::disk('public')->delete('/images/user/' . $oldavatar ); }
So I tested it out with dd(Storage::disk('public')->exists('index.php')); etc. I tried every file there is. I also added a disk in the filesystem.php with
'images' => [ 'driver' => 'local', 'root' => storage_path('app/public/images'), 'visibility' => 'public', ],
Still nothing, I'm getting a false for exists.
-
jmike about 5 yearsthanks for coming back and putting the right answer! your solution worked @PhilippMochine