2017-11-26 8 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); 
        } 

그래서 내가 (저장 : 디스크 ('공공') ->)가 ('index.php를'존재) DD 그것을 밖으로 테스트; 그래서 내 코드 발췌를 살펴 보자 나는 모든 파일을 시도했다. filesystem.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() '디스크'는 동일한 루트를 갖지 않습니다.

공공 디스크는 아마 같은 가리키는 : .../yoursite/storage/app/public

public_path() 뭔가를 반환합니다 : .../yoursite/public 공공 디스크 .../yoursite/public/storage에서 공용 폴더에 연결되어

- 미래를 위해>.../yoursite/storage/app/public