Check if file exists with Laravel 5.5 Storage? Storage for Avatar

17,758

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',
    ],
Share:
17,758
Philipp Mochine
Author by

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, 2022

Comments

  • Philipp Mochine
    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
    jmike about 5 years
    thanks for coming back and putting the right answer! your solution worked @PhilippMochine