(계속) 컨트롤러에서 s3에 저장된 이미지 삭제(Laravel)

5526 단어 PHPLaravelAWS

입문


채팅 응용 프로그램에서 1조의 정보 수 상한선을 50건(Laravel)으로 설정한 후속이다.
마지막 내용은 메시지가 50개가 넘는 상황에서 자동으로 오래된 메시지를 삭제하는 코드입니다.삭제할 것은 오래된 메시지 기록 (메시지 테이블의 데이터) 입니다.

영상 송수신 메커니즘


화면은 아래와 같다.

'파일 선택'에서 이미지를 선택하고'보내기'를 누르면 이미지는 컨트롤러를 통해 s3에 저장됩니다.
이미지를 저장하는 s3 링크를 image_path열에 저장합니다.파일 이름 앞에 path를 붙여서 저장합니다.https://バケット名.s3.us-east-2.amazonaws.com/ファイルハッシュ名.jpeg 이런 요령.
그림을 표시할 때blade.php에서 <img> 표시로 호출합니다.
's3의 저장 방법'등 작은 부분은 건너뛰고 썼다.만약 수요가 있다면, 나는 다른 보도를 뒤쫓아 쓰고 싶다.

코드


코드 바로 업로드할게요.이른바 결론이 제일이다.
움직이기 전에 여러 가지 오류가 있었지만 거의 모두 오류여서 쓰지 않았다.
GroupController.php@send
$count = $message->where('group_id',$_POST['group_id'])->count();
          if ($count > 50) {
            $message50 = DB::table('messages')
            ->where('group_id', $_POST['group_id'])
            ->orderBy('id','desc')
            ->take(50);
            $deleteid = $message50->pluck('id')->min();
            $messageins = message::where('group_id',$_POST['group_id']);
            $deletemessage = $messageins->where('id','<',$deleteid);            
            $image = $deletemessage->pluck('image_path');            
            foreach($image as $item){
              if($item !== null){
                $item = basename($item);
                $disk = Storage::disk('s3');
                $disk->delete('/', $item);
              }
            }          
            $deletemessage->delete();
          }

해설


상술한 일과 다른 부분은 foreach 이후다.$image = $deletemessage->pluck('image_path'); image_ 확인path만 포함하는 그룹 $image를 만듭니다.물론 이미지 메시지가 없는 경우 image_path열이 비어 있습니다.
"BppGmL1UlOZ28bkpEKmX4ik0LoK45FcEuIzJQgcP.jpeg"를 키 이름으로 s3에 저장된 파일을 삭제하려면$disk = Storage::disk('s3'); $disk->delete('/BppGmL1UlOZ28bkpEKmX4ik0LoK45FcEuIzJQgcP.jpeg');.
이 키 이름을 변수로 바꾸기만 하면 됩니다.foreach와if를 사용하여 이미지 열의 파일을 하나씩 삭제합니다.

좋은 웹페이지 즐겨찾기