[Laravel] 스토리지 사용법

[Laravel] 스토리지 사용법 updated_at: 2024-07-16 17:19

스토리지 사용법

laravel 에서 데이타를 저장하는 장소로 storage라는 폴더를 사용합니다.

storage 위치

일반적으로는 storage 하위의 app 이란 폴더가 기본으로 사용됩니다.

[APP Project]/storage/app

public 심볼릭 링크

여기서 주목할 점은 storage/app 은 일반 유저들이 직접 접근을 할 수 없다.
따라서 파일의 보안성은 높아지는 반면에 브라우저로 접근하여 이미지등을 가져올 수 없다.
그래서 사용하는 것이 심볼릭 링크다.
[APP Project]/storage/app 하위 디렉토리에 public 이라는 것이 있는데 이것을 실제 public ([APP Project]/public) 과 심볼링 링크를 걸어 두는 것이다.

php artisan storage:link

// 실행결과
The [/home/[APP Project]/public/storage] link has been connected to [/home/[APP Project]/storage/app/public].
The links have been created.

위와같이 처리하면 onstory.fun/storage/image.png 로 접근하면 [APP Project]/storage/app/public 에 등록된 이미지를 호출 할 수 있다.
따라서 프로그램시 다운로드용이미지는 /storage/app 이하로(보안을 위해서) 위치시키고 별도의 다운로드 프로그램을 만들어 주고
일반 이미지는 /storage/app/public 이하에 두어 접근성을 용이하게 한다.

기본적인 저장

아래는 이미지 url을 받아서 storage 에 저장하는 프로그램 입니다.
아래의 결과는 [APP Project]/storage/app/avatar/pondol 이라는 파일이 저장됩니다.

put

Storage에 데이타를 저장할 경우 사용됩니다.
그 데이타가 string 인지 file인지에 따라 약간의 사용법상 차이가 있습니다.

String 을 저장할 경우

use Illuminate\Support\Facades\Storage;
..........

$contents = file_get_contents($url);
$name = 'pondol'
Storage::put('avater/'.$name, $contents); // file_get_contents 으로 받을 경우 'avater/'.$name 이라는 "파일"에 contents가 write되고

파일을 저장할 경우

$avatar = $request->file('avatar');
$name = 'pondol'
Storage::put('avater/'.$name, $avatar); // $request->file 로 받을 경우 'avater/'.$name 이라는 "폴더" 하위로 avatar가  write된다.

파일삭제

특정 파일을 삭제할 경우 사용합니다.

Storage::delete('file.jpg');
Storage::delete(['file.jpg', 'file2.jpg']);

Storage::disk('s3')->delete('path/file.jpg');

Directoy 관련

deleteDirectory

디렉토리및 디렉토리에 있는 모든 파일들을 삭제합니다.

Storage::deleteDirectory($directory);

다운로드

return Storage::download('file.jpg');
return Storage::download('file.jpg', $name, $headers); // name이 있을 경우 원파일을 주어진 이름으로 변경하여 다운로드 합니다.

// 아래와 같이 Response를 사용하여 처리 가능합니다.
return Response::download(file.jpg, 'file_name', [
        'Content-Length: '. filesize($result['file_path'],)
      ]);

파일 URLs

use Illuminate\Support\Facades\Storage;
$url = Storage::url('file.jpg');

파일 Path

$path = Storage::path('file.jpg');

파일 메타

size

use Illuminate\Support\Facades\Storage;
 
$size = Storage::size('file.jpg')

수정일

$time = Storage::lastModified('file.jpg');

mimeType

$mime = Storage::mimeType('file.jpg');
평점을 남겨주세요
평점 : 5.0
총 투표수 : 1

질문 및 답글