[laravel/storage] 업로드된 파일 저장하기

파일스토리지 설정하기

  • 파일 시스템 설정파일위치 config/filesystem.php
  • 설정파일에서 이미지 저장 path, url등을 수정할 수 있다.

Public 디스크

  • public 디스크는 local드라이버를 사용하고 storage/app/public에 저장함.
  • 웹에서 파일을 서빙하려면 public/storage를 storage/app/public으로 심볼릭 링크를 생성해야한다. 아티즌명령으로 심볼릭링크를 생성할 수 있다.
php artisan storage:link

명령을 실행하고 public/storage를 확인하면 심볼링 링크가 생성된걸 확인 할 수 있다. 이제 파일을 업로드하고 처리하는 코드를 작성해보자.

#write.blade.php

<form enctype="multipart/form-data">
    <input type="file" name="file">
</form>
#controller

$request->file('file')->store('images', 'public');

store메소드의 첫번째 인자는 파일이 저장될 폴더명이다. 예제에서는 ‘images’로 지정했기 때문에 /storage/app/public에 images 폴더를 생성한 뒤 파일을 저장한다.
파일명은 자동으로 랜덤한 값이 들어가고 경로와함께 반환된다. 예) images/임의이름.jpg
두번째 인자는 저장에 사용할 디스크를 지정한다.

#view.blade.php // 파일 서빙

{{asset('storage/file.jpg')}}

asset(‘storage/file.jpg’)을 통해서 반환되는 이미지 경로는 mysite.com/storage/images/file.jpg 가 된다.

실제로사용하기

  • 글을저장하는 post테이블, 파일을 저장하는 file테이블이 있다.
  • post모델에 1:다 관계(hasMany)를 지정한다.
  • file모델에는 1:1 관계( belongsTo)를 지정한다.

뷰에서 값을 확인하면 객체를 포함한 배열을 볼수 있다. 아래와 같이 배열의 길이를 확인하고 처리하면된다.

@if(count($post->file))
    {{$post->file[0]->ori_fname}}
@endif

참고

파일스토리지
업로드된 파일 저장하기