Laravel의 아름다운 통합 API를 사용하여 Laravel에 파일을 업로드하여 로컬 디스크부터 S3와 같은 원격 개체 스토리지까지 다양한 유형의 스토리지 시스템과 상호 작용할 수 있습니다.
다른 많은 Laravel 구성 요소와 마찬가지로 Storage Facade: Illuminate/Support/Facades/Storage를 통해 애플리케이션 파일 시스템과 상호 작용할 수 있습니다
이 클래스를 사용하면 공통 인터페이스를 구현하는 디스크라는 스토리지 드라이버에 액세스할 수 있습니다. 따라서 애플리케이션 코드를 건드리지 않고도 기본 물리적 스토리지를 변경할 수 있습니다.
이를 통해 로컬 파일 시스템, FTP 또는 AWS S3에서 동일한 방식으로 읽고 쓸 수 있을 뿐만 아니라 로컬 환경에서 개발하는지 아니면 프로덕션에서 애플리케이션을 실행하는지에 따라 다른 옵션을 선택할 수 있습니다. .
맞춤형 Facade를 구축하는 방법을 알아보려면 아래 기사를 읽어보세요.
https://inspector.dev/how-to-extend-laravel-with-driver-based-services/
더 많은 기술 관련 기사를 보려면 Linkedin이나 X에서 저를 팔로우하세요.
Laravel은 config/filesystems.php 구성 파일에 구성된 "디스크"를 통해 스토리지에 대한 액세스를 관리합니다. 각 디스크에는 애플리케이션에 연결될 스토리지 시스템의 실제 유형을 정의할 수 있는 식별 이름과 드라이버가 있습니다.
드라이버에 따라 다른 옵션을 구성할 수 있습니다. 예를 들어, 로컬 드라이버가 있는 디스크에서는 해당 디스크가 해당하는 실제 로컬 디렉터리를 나타내기 위해 root 매개 변수를 설정해야 합니다. s3 드라이버를 사용하는 경우 AWS S3 또는 S3 호환 시스템에 액세스하려면 다양한 키, 비밀, 지역 및 버킷을 설정해야 합니다.
기본적으로 구성되는 다양한 디스크 중에서 public이라는 디스크가 가장 흥미로운 디스크 중 하나입니다. 이 디스크는 Laravel 애플리케이션에서 공개적으로 액세스할 수 있어야 하는 파일을 호스팅하도록 설계되었습니다.
'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ],
위의 코드에서 볼 수 있듯이 디스크의 드라이버는 로컬이고 루트는 개인 저장소/앱/공용 디렉터리입니다.
비공개 디렉토리에 어떻게 공개적으로 액세스할 수 있나요?
공용 디스크가 작동하려면 Laravel 공용 폴더를 디스크에 구성된 개인 루트에 연결하는 심볼릭 링크를 만들어야 합니다.
다행히도 Laravel에는 이 설정을 자동으로 수행하는 명령이 내장되어 있습니다.
php artisan storage:link
로컬 환경을 포함하여 컴퓨터에 Laravel 애플리케이션을 처음 설치할 때 이 명령을 실행해야 합니다.
심볼릭 링크를 생성하면 Laravel은 Storage/app/public 폴더를 public/storage 폴더에 연결합니다. 즉, 공개 페이지에 파일을 표시하려면 다음을 수행할 수 있습니다.
{{ asset('storage/file.txt') }}
파일은 물리적으로 Storage/app/public에 저장되지만 심볼릭 링크 덕분에 yourdomain.com/storage/filename.ext 경로에서 액세스할 수 있습니다
공용 폴더는 일반적으로 웹 서버(Apache, NGINX 등)의 루트이고 웹사이트나 앱이 가리킬 수 있는 유일한 경로이기 때문에 이 작업이 필요합니다. 심볼릭 링크는 저장 폴더의 일부를 외부에서 사용할 수 있도록 해줍니다.
다음은 파일 업로드를 허용하는 HTML 형식의 예입니다.
<form action="/avatar" method="POST" enctype="multipart/form-data"> {{ csrf_field() }} <input type="file" name="avatar"/> <button type="submit"></button> </form>
이 파일을 디스크에 저장하는 것은 매우 쉽습니다. 요청 객체에는 파일 유형의 양식 필드에서 보낸 항목을 가져올 수 있는 파일 메서드가 있습니다. 프런트엔드에서 전송된 파일에 접근하기 위해 입력 필드의 이름을 file 메소드에 전달하는 항목을 얻을 수 있습니다.
namespace App/Http/Controllers; use App/Http/Resources/UserResource; class AvatarController extends Controller { public function update(Request $request) { $path = $request->file('avatar')->store("avatars/{$request->user()->id}"); $request->user()->update(['avatar' => $path]); return new UserResource($request->user()); } }
store 메소드는 요청에서 파일을 가져와 파일 이름에 대한 고유 ID를 생성하여 디스크에 저장하며, 파일 확장자는 요청에 제공된 MIME 유형에서 검색됩니다. 저장된 파일의 경로를 반환하므로 저장하거나 사용할 수 있습니다.
store는 config/filesystem.php에 구성된 기본 디스크를 사용하지만 결국에는 즉시 다른 디스크를 지정할 수 있습니다.
$path = $request->file('avatar') ->store("avatars/{$request->user()->id}", 's3');
Storage 파사드를 직접 사용하여 동일한 결과를 얻을 수 있습니다:
$path = Storage::disk('s3') ->putFile("avatars/{$request->user()->id}", $request->file('avatar'));
저는 개인적으로 Storage 파사드를 사용하는 것을 선호합니다. 왜냐하면 이것이 문을 더 명확하게 만들기 때문입니다.
더 많은 기술 관련 기사를 보려면 Linkedin이나 X에서 저를 팔로우하세요.
Inspector는 소프트웨어 개발자를 위해 특별히 설계된 코드 실행 모니터링 도구입니다. 서버 수준에서 아무것도 설치할 필요가 없습니다. Laravel 패키지만 설치하면 바로 사용할 수 있습니다.
HTTP 모니터링, 데이터베이스 쿼리 통찰력, 경고 및 알림을 선호하는 메시징 환경으로 전달하는 기능을 찾고 있다면 Inspector를 무료로 사용해 보세요. 계정을 등록하세요.
또는 웹사이트에서 자세한 내용을 알아보세요: https://inspector.dev
위 내용은 Laravel에 파일 업로드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!