Laravel에서 Amazon S3 스토리지 사용 시작

나는 과거에 아마존의 S3 서비스로 Laravel 응용 프로그램에서 온 이미지와 파일을 저장하는 몇 가지 프로젝트에 참여한 적이 있다.비록 이 기능은 기본적으로 프레임워크에 내장되어 있지만, 입문 과정은 약간 조화롭지 못할 수 있으며, 특히 AWS 세트에 대해 경험이 많지 않은 사람들에게는 그렇다.
그러나 S3를 사용하는 장점은 매우 크기 때문에 이 간단한 강좌를 함께 놓고 새로운(또는 기존) Laravel 응용 프로그램의 저장소를 아마존 S3 저장소통에 연결하는 방법을 소개할 필요가 있다고 생각합니다.
계속 읽고 싶지 않아요?영상 보시죠!

프로젝트 작성


저장 기능을 보여주기 위해서, 나는 Laravel에 슈퍼 누드 이미지 업로드기를 구축할 것이다.
우선, 우리는 세 가지 노선이 필요하다.routes/web.php 파일을 열고 두 개의 GET 요청과 하나의 POST를 생성합니다.이것은 초기 로그인 페이지에 사용되며, 이미지를 저장하고, 업로드된 단일 이미지를 표시합니다.간단하게 보기 위해서 이 세 개는 모두 같은 컨트롤러ImageController.php를 사용할 것이다.
다음은 나의 건의이다.
Route::get('/', 'ImageController@create');
Route::post('/', 'ImageController@store');
Route::get('/{image}', 'ImageController@show');
그리고 프로젝트 루트 디렉터리에 있는 컨트롤러에서artisan으로 이 컨트롤러를 만들 수 있습니다.또한 --migration 로고가 있는make:모델 생성 모델과 이전도 사용할 수 있습니다.어떻게 생겼는지 보여줘.
php artisan make:controller ImageController
php artisan make:model Image --migration
이 프레젠테이션 프로그램에 대해 데이터베이스 테이블에 대량의 열을 설정할 필요가 없습니다.나는 파일 이름과 URL이 이 목적에 적합할 것이라고 생각한다.database/migrations/ 디렉토리에서 새 마이그레이션을 열고 다음과 같이 수정했습니다.
public function up()
{
    Schema::create('images', function(Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('filename');
        $table->string('url');
        $table->timestamps();
    });
}
routes/web.php 파일을 살펴보면 ImageController에 세 가지 방법이 필요하다는 것을 알 수 있습니다.생성(), 저장() 및 업데이트().
창설은 간단한 과정입니다. 이미지를 표시하고 폼을 올리는 보기로 돌아가고 싶습니다. 그러면 그림을 추가하고 단추를 누르면 폼을 제출할 수 있습니다.그러나 Store는 요청 파라미터가 필요합니다. 그러면 폼을 제출한 후에 이미지 데이터를 추출하여 S3 메모리통에 저장할 수 있습니다.마지막으로 업데이트는 Image 매개 변수를 입력하면 hint를 입력하여 저장된 이미지를 사용자의 브라우저로 직접 전송할 수 있습니다.
표부터 시작합시다.TailwindCSS와 resources/views/images/create.blade.php 파일을 사용하여 제가 생각할 수 있는 가장 기본적인 업로드 폼을 만들었습니다.

이 방면의 표기는 마찬가지로 간단하다. 이것은 루트 페이지에 발표되는 표이다. 우리는 루트 페이지에 데이터를 보내는 ImageController@store 방법의 경로를 만들었다.
<div class="max-w-sm mx-auto py-8">
    <form action="/" method="post" enctype="multipart/form-data">
        <input type="file" name="image" id="image">
        <button type="submit">Upload</button>
    </form>
</div>

로컬에 이미지 저장


대부분의 다른 것들과 마찬가지로, Laravel은 파일을 업로드한 후에 파일을 캡처해서 로컬에 저장하는 것을 매우 쉽게 해 줍니다.ImageController의 store() 방법에서 $request 대상의 file 방법을 호출하여 파일 입력의 이름 image 을 전달할 수 있습니다.
이 점에 연결하면 store 방법을 사용하여 로컬 경로를 지정할 수 있습니다. 이 경로는 자동으로 이미지 파일 (무작위로 생성된 이름과 정확한 확장자) 을 로컬 디스크에 저장합니다.
이 모든 것은 하나의 아주 간단한 코드에 포함되어 있다.
$path = $request->file('image')->store('images');
이제 이 경로를 브라우저로 되돌려줍니다.
웹 브라우저에서 폼을 되돌려주고 업로드할 이미지를 선택한 다음 '업로드' 단추를 누르면 이미지를 저장하는 상대적인 파일 경로를 볼 수 있습니다.
우리 Laravel 프로그램의 storage/app 디렉터리를 보면 새 /images 디렉터리가 만들어지고 그림이 그 안에 있는 것을 볼 수 있습니다.
잘 됐다!이것은 현지에서 유효합니다!이제 이 기능을 Amazon으로 마이그레이션할 시점입니다.내가 앞서 언급한 바와 같이, 라빌은 이미 상자를 열자마자 대부분의 문제를 해결했다.애플리케이션.env 파일에 4개의 다른 값을 추가하기만 하면 됩니다.
  • AWS 액세스 키 ID
  • AWS 기밀 액세스 키
  • AWS 기본 지역
  • AWS 삽
  • 어떻게 해야 이런 것을 얻을 수 있는지 봅시다.

    S3 통 설정


    aws.amazon.com로 이동하여 계정을 만들거나 기존 계정으로 로그인합니다.들어가면 상단 메뉴 표시줄을 보고 '서비스' 항목을 찾으십시오.만약 이 단추를 누르면 아마존의 대량의 AWS 서비스 목록을 포함하는 상자를 열 수 있습니다.아래로 스크롤하고 [저장] 섹션에서 [S3]을 선택합니다.
    아래 화면에는 당신이 만든 모든 S3 저장통의 목록과 파란색 '저장통 만들기' 단추가 있습니다.그거 클릭!다음 페이지에서 Bucket 이름을 입력하고 (전체 AWS 플랫폼에서 유일해야 함) Bucket에 가장 적합한 영역을 선택하십시오.
    나머지 페이지는 기본값을 유지하고 버킷이 만들어질 때까지 다음 단추를 계속 눌러야 합니다.
    알겠습니다. 버킷이 있습니다. 하지만 프로그래밍 방식으로 접근할 수 있도록 증거가 필요합니다.서비스 메뉴 항목을 다시 클릭하여 IAM을 검색합니다.이것은 신분과 접근 관리를 대표합니다. 새로 만든 버킷에 id/secret 쌍을 만들 것입니다.
    이 화면 왼쪽에서 액세스 관리 그룹 아래의 사용자 항목을 클릭합니다.다음 페이지에서 파란색 사용자 추가 버튼을 클릭합니다.
    사용자의 사용자 이름을 입력하고 '프로그래밍 접근' 옆에 있는 콤보 상자를 선택하십시오. 이로써 AWS는 사용자가 키 ID와 비밀 접근 키를 생성할 것을 알 수 있습니다.

    다음 페이지는 아마도 이 강좌에서 가장 사람을 곤혹스럽게 하는 부분일 것이다. 솔직히 이것은 매우 간단하다.Amazon은 여러 사용자를 관리해야 할 경우 각 사용자별로 권한을 결정할 수 있으며 그룹에 사용자를 추가할 수도 있습니다.
    우리의 간단한 프레젠테이션 (솔직히 말하면 대부분의 프로젝트에 대해 말하자면), 나는 '기존 정책을 직접 추가하는 것' 부분에서 검색S3을 하고 AmazonS3FullAccess 옆에 있는 상자를 선택하는 것을 더 좋아한다.이것은 사용자 (ID/secret 포함) 가 S3 메모리 통에 대해 완전한 읽기/쓰기 권한을 가지고 있음을 확보합니다.
    다음 몇 개의 화면을 누르면 모든 내용이 변하지 않습니다. 사용자가 성공적으로 만들 것입니다.
    사용자가 만든 사용자와 액세스 키 ID 및 비밀 액세스 키가 포함된 화면에 나타납니다.이 두 값을 프로그램의 .env 파일에 복사합니다. 위에 열거한 적당한 제목 아래에 있습니다.
    우리.env 서류에 필요한 다른 두 가지 물품은 통에서 직접 꺼낼 수 있다.작성 시 사용된 이름과 동일한 단계에서 선택한 영역입니다.
    이제 Laravel에게 로컬 디스크가 아닌 S3를 사용하라고 알리기만 하면 됩니다.

    응용 프로그램에 S3 연결


    ImageController의 store() 방법으로 돌아가면, 우리가 해야 할 일은 파일을 저장하는 한 줄의 코드를 바꾸는 것이다.store() 방법에서 "images"다음에 쉼표와 문자열 "s3"을 추가합니다.
    $path = $request->file('image')->store('images', 's3');
    
    이것은 Laravel에서 S3 디스크 서비스를 사용하고자 하는 것을 알려 줍니다. 이 서비스는 저희 프로그램의 서비스 설정에 설정되어 있습니다.
    이 연결의 마지막 부분은 Laravel을 설치해서 우리의 응용 프로그램과 S3 버킷 사이의 교량으로 사용하는 소프트웨어 패키지입니다.응용 프로그램 루트 디렉토리의 다음 행에서 이 작업을 수행할 수 있습니다.
    composer require league/flysystem-aws-s3-v3
    
    자, 이제 우리 프로그램으로 돌아가서 파일을 업로드해 봅시다.
    정말 쓸모가 있다!경로를 되돌려줍니다. 그러나 storage/app/images 디렉터리를 보면 새로운 내용이 없습니다.그것은 그것이 우리 S3통에 배달되었기 때문이다.만약 우리가 버킷을 새로 고침한다면, 현재 이미지라는 폴더가 있습니다. 그것을 클릭하면 우리가 올린 그림을 볼 수 있습니다.
    이전에 생성한 모델을 사용하겠습니다.

    데이터베이스에 이미지 저장


    ImageController의 store() 방법으로 돌아가서 이미지를 저장한 후에 새로운 이미지 대상을 만듭니다.기억해라. 우리는 두 개의 값, 한 개의 파일 이름과 한 개의 URL만 필요로 한다.PHP basename 방법으로 얻을 수 있는 파일 이름과 Storage facade의 URL 조수를 통해 검색할 수 있는 URL입니다.Amazon S3 이미지 객체의 전체 URL을 이미지 저장 경로로 쉽게 반환할 수 있습니다.
    이것이 모델 개체가 생성한 모습입니다.
    $image = Image::create([
        'filename' => basename($path),
        'url' => Storage::disk('s3')->url($path)
    ]);
    
    현재, 우리는 이전처럼 $path를 되돌려주지 않고, 전체 $이미지 대상을 되돌려줍니다.
    앱의 업로드 폼으로 돌아가 사진 한 장을 선택하고 업로드를 클릭하자.이번에는 이미지 모델의 ID, 파일 이름 및 URL이 포함된 JSON을 반환했습니다.

    기본적으로 이미지 URL도 현재 개인 잠금 상태입니다.클릭하면 AWS에서 액세스 거부 오류를 반환하고 이미지를 직접 볼 수 없습니다.반대로 우리는 어쩔 수 없이 다른 방식으로 진행할 것이다.
    ImageController로 돌아가면 이미지 ID를 받는 show() 방법이 있습니다. 유형 알림의 이미지 대상을 사용할 수 있습니다. Storage facade에 다시 한 번 감사드립니다. S3에서 이미지를 검색하고 적절한 내용 유형을 가진 브라우저 응답 흐름으로 전송할 수 있습니다.이 모든 것은 코드 한 줄만 필요합니다.
    return Storage::disk('s3')->response('images/' . $image->filename);
    
    방금 반환된 이미지 ID를 사용하여 응용 프로그램에 액세스하는 경로를 사용하면 Laravel은 S3 저장소 통에서 이미지를 검색하여 브라우저에 직접 표시합니다.

    이게 다야.


    이제 그만!
    당신은 이미 어떻게 하는지 성공적으로 배웠다.
  • 이미지 파일을 업로드하고 로컬에 저장
  • Amazon S3 스토리지 통 설치 및 자격 증명 할당
  • 로컬 디스크 스토리지를 Amazon S3 스토리지 통으로 변환
  • Laravel
  • 을 사용하여 S3 메모리 통에서 이미지 검색
    Laravel 개발, Amazon AWS 또는 기타 일반적인 웹 개발 주제에 대한 정보를 더 알고 싶으시면 언제든지 제 것이나 제 것을 주목해 주십시오.
    질문이 있으시면 언제든지 연락 주세요!

    좋은 웹페이지 즐겨찾기