728x90
라라벨 블로그를 만들던 도중 회원정보 조회기능에서 회원 프로필사진을 수정하는 기능을 구현하던중
웹에서 접근하는 경로와 코드(?)가 접근하는 경로가 다르다는걸 알았다
https://laravel.kr/docs/8.x/filesystem
라라벨 8.x - 파일 스토리지
라라벨 한글 메뉴얼 8.x - 파일 스토리지
laravel.kr
라라벨 공식문서에 파일 스토리지부분을 참고했다
public function store(Request $request){
if($request->hasfile('pic')){
$validatedData = $request->validate([
'pic' => 'image|mimes:jpeg,png,jpg,gif,svg|max:2048',
]);
$picname = $request->user()->id.'.'.$request->file('pic')->extension();
// 파일을 저장하고 그 경로를 반환(storeAs 2번째 인자는 파일 이름 설정)
$picpath = $request->file('pic')->storeAs(
'public/avatar', $picname
);
//저장하는 경로와 웹에서 접근가능한 경로가 달라서 저장위치와 db에 저장될 파일경로는 다르게 해줌
$pic = 'storage/avatar/'.$picname;
//dd($picpath);
$user = User2::find($request->input('id'));
$user->profile_photo_path = Crypt::encryptString($pic);
$user->save();
}
return redirect()->route('userinfo.index')->with('success', '회원 정보가 수정되었습니다.');
}
기본적으로 파일이 저장될땐 storage디렉토리에 저장된다 하지만 웹에서 접근하는 경로는 public디렉토리로 접근을 하는걸 확인했다 그래서 DB에 저장하는 경로와 출력할때 경로가 달라서 고민하던중 storage에 저장하고 이름만 수정해서 DB에 저장하는 방법을 선택했다
$picpath = $request->file('pic')->storeAs(
'public/avatar', $picname
);
이 부분에서 $picpath변수에는 public/avatar/1.jpg라는 경로가 저장되고 이것이 storage/app/public/avatar/1.jpg라는 경로에 저장되는 부분이다
$pic = 'storage/avatar/'.$picname;
하지만 웹에서 출력할때는 public/storage/avatar/1.jpg 라는 경로를 출력해야하기 때문에 DB에 저장할 이름은 따로 변경하여서 저장해주었다 심볼릭링크로 인해 storage/app/public 디렉토리안에 내용들이 public디렉토리안에 storage디렉토리 바로가기가 만들어져서 경로가 이렇게되는거 같다
728x90
'개발지식 > PHP' 카테고리의 다른 글
| [Laravel] laravel jetstream 이메일 인증 커스터마이징 (0) | 2022.01.18 |
|---|---|
| [Laravel] javascript로 페이지 이동없이 update구현하기 (0) | 2022.01.13 |
| [Laravel] laravel 암호화 Crypt vs Hash (0) | 2022.01.03 |
| [Laravel] laravel jetstream 회원가입 기능 동작 흐름 (0) | 2021.12.17 |
| [Laravel] laravel jetstream 프로젝트 시작시 설정해줘야 할 것 (0) | 2021.12.10 |