2017-11-26 9 views
0

このコードに基づいて:https://devdojo.com/episode/laravel-user-imageアバターをアップロードして古いものを削除するために、次のコードを作成しました。 Storage:Facadeを使用しようとしていますが、それが正しいかどうかはわかりません。それでは、私のコードの抜粋を見てみましょう:Laravel 5.5 Storageにファイルが存在するかどうかを確認しますか?アバターのためのストレージ

    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); 
        } 

だから私はDDでそれをテストした(ストレージ::ディスク(「公共」) - >)が(「index.phpを」に存在します)。私はそこにあるすべてのファイルを試しました。私はまた、ファイルシステムにディスクを追加しました

'images' => [ 
     'driver' => 'local', 
     'root' => storage_path('app/public/images'), 
     'visibility' => 'public', 
    ], 

まだ何も、私は存在するために虚偽を取得しています。

答えて

0

読者:

    //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(); 
        } 

ウィットファイルシステム.php:

 'images' => [ 
     'driver' => 'local', 
     'root' => storage_path('app/public/images'), 
     'visibility' => 'public', 
    ], 
0

public_path()とディスク 'public'は同じルートを持っていません。

公共ディスクは、おそらくのようなものを指している:.../yoursite/storage/app/public

public_path()のようなものを返します:.../yoursite/public公共ディスクが.../yoursite/public/storageでパブリックフォルダにリンクされている

- 将来のために>.../yoursite/storage/app/public

関連する問題