본문으로 바로가기

라라벨 - 파일 업로드

category 코딩/Laravel 2024. 6. 24. 15:20

 

업로드 폴더 생성

파일 업로드가 가능한 게시판을 만들었는데, 우선 /storage/app/public 아래에 bbs 라는 폴더를 생성하였다.

$ mkdir bbs
$ chmod -R 777 bbs

 

라라벨 controller

업로드 파일이 존재하면 /public/bbs 하위에 게시물마다 고유한 이름의 폴더를 생성한다.

생성된 폴더에 파일들을 업로드한다.

$files = $request->file('upload');

if($request->hasFile('upload')) {

	$uploadDir = $this->getRandNo();
    
    File::makeDirectory('/public/bbs/'.$uploadDir, $mode = 0777, true, true);

    foreach ($files as $key => $file) {

        $file->storeAs('/public/bbs/'.$uploadDir, $file->getClientOriginalName());

    }

}

 

아래처럼 파일이 첨부된 게시물마다 각각의 폴더가 생성된다(중복 파일명 overwrite 방지).

$ ll /var/www/html/example/storage/app/public/bbs
total 44
drwxr-xr-x 11 www-data  www-data  4096 Jun 21 18:19 ./
drwxrwxrwx  3 lifelike2 lifelike2 4096 Jun 20 13:38 ../
drwxr-xr-x  2 www-data  www-data  4096 Jun 20 14:15 1718860536592/
drwxr-xr-x  2 www-data  www-data  4096 Jun 20 14:34 1718861680786/
drwxr-xr-x  2 www-data  www-data  4096 Jun 20 17:31 1718871123726/
drwxr-xr-x  2 www-data  www-data  4096 Jun 20 17:24 1718871887183/
drwxr-xr-x  2 www-data  www-data  4096 Jun 20 17:35 1718872538235/
drwxr-xr-x  2 www-data  www-data  4096 Jun 21 09:36 1718930168688/
drwxr-xr-x  2 www-data  www-data  4096 Jun 21 18:15 1718959823990/
drwxr-xr-x  2 www-data  www-data  4096 Jun 21 18:19 1718961547973/
drwxr-xr-x  2 www-data  www-data  4096 Jun 24 09:41 1718961577454/

 

다운로드 확인

다운로드 URL 은 https://도메인/storage/bbs/폴더명/파일명 식이 될텐데,

이렇게 접근하려면 public 폴더 하위에 심볼릭 링크를 생성해야 한다.

(원본 : /public/storage, 링크 : /storage/app/public)

 

리눅스 ln 명령어로도 가능하고 artisan 으로도 가능하다.

$ php artisan storage:link
The [/var/www/html/example/public/storage] link has been connected to [/var/www/html/example/storage/app/public].
The links have been created.