>  기사  >  PHP 프레임워크  >  라라벨 s3 사용법

라라벨 s3 사용법

WBOY
WBOY원래의
2023-05-26 13:10:07833검색

클라우드 컴퓨팅 및 객체 스토리지 기술의 발전으로 점점 더 많은 애플리케이션이 클라우드 스토리지를 사용하여 사용자가 업로드한 파일을 저장하고 처리하기 시작했습니다. Amazon S3는 거의 무제한의 파일을 저장할 수 있고 가용성과 확장성이 뛰어나고 안전한 스토리지 솔루션을 제공하는 매우 인기 있는 객체 스토리지 서비스입니다.

Laravel은 웹 애플리케이션을 쉽게 구축하고 관리할 수 있는 풍부한 기능과 도구를 제공하는 널리 사용되는 PHP 프레임워크입니다. 이 글에서는 Laravel 프레임워크와 Amazon S3 스토리지 서비스를 사용하여 업로드 및 저장된 파일을 관리하는 방법에 대해 설명합니다.

AWS SDK 설치

Amazon S3 서비스를 사용하기 전에 Laravel 애플리케이션에 AWS SDK를 설치해야 합니다. Composer를 사용하여 SDK를 설치할 수 있습니다. 터미널이나 명령줄을 열고 Laravel 애플리케이션의 루트 디렉터리로 이동하세요. 그런 다음 다음 명령을 실행합니다.

composer require aws/aws-sdk-php

이렇게 하면 Laravel 애플리케이션에 AWS SDK가 설치되고 Amazon S3와 상호 작용할 준비가 됩니다.

Amazon S3 설정

Amazon S3를 사용하는 경우 Amazon S3와 상호 작용하는 데 필요한 자격 증명과 구성을 설정해야 합니다. 이러한 자격 증명 및 구성에는 AWS 액세스 키 ID 및 보안 액세스 키, 사용될 리전 이름 및 버킷 이름이 포함됩니다. 런타임에 사용할 수 있도록 이러한 자격 증명과 구성을 Laravel 애플리케이션의 .env 파일에 추가할 수 있습니다.

다음은 AWS 자격 증명 및 구성 정보가 포함된 샘플 .env 파일입니다.

AWS_ACCESS_KEY_ID=your_access_key_id
AWS_SECRET_ACCESS_KEY=your_secret_access_key
AWS_DEFAULT_REGION=us-west-2
AWS_BUCKET=your_bucket_name

.env 파일에서 이러한 자격 증명 및 구성을 설정한 후 config 함수를 사용하여 Laravel 애플리케이션의 코드에서 액세스할 수 있습니다. 예를 들어, AWS 버킷의 이름을 얻으려면 다음 코드를 호출하기만 하면 됩니다.

$bucketName = config('aws.bucket');

Amazon S3에 파일 업로드

Laravel 애플리케이션에서 Amazon S3에 파일을 업로드하는 것은 로컬 서버 또는 기타 서버에 파일을 업로드하는 것과 매우 유사합니다. 클라우드 스토리지 서비스. 먼저 사용자가 업로드할 파일을 선택할 수 있는 양식을 만들어야 합니다. 그런 다음 파일을 Laravel 애플리케이션에 저장하고 Amazon S3에 업로드합니다.

다음은 사용자가 파일을 업로드하는 데 사용할 수 있는 샘플 업로드 양식입니다.

<form action="/upload" method="post" enctype="multipart/form-data">
    @csrf
    <input type="file" name="file">
    <button type="submit">上传</button>
</form>

사용자가 파일을 업로드한 후 Laravel 컨트롤러에서 다음 코드를 사용하여 파일을 Amazon S3에 업로드할 수 있습니다.

use AwsS3S3Client;
use IlluminateHttpRequest;

public function upload(Request $request)
{
    $file = $request->file('file');
    $fileName = $file->getClientOriginalName();

    $s3 = new S3Client([
        'version' => 'latest',
        'region'  => config('aws.region'),
        'credentials' => [
            'key'    => config('aws.key'),
            'secret' => config('aws.secret'),
        ],
    ]);

    $bucketName = config('aws.bucket');

    $result = $s3->putObject([
        'Bucket' => $bucketName,
        'Key'    => $fileName,
        'Body'   => file_get_contents($file),
        'ACL'    => 'public-read',
    ]);

    $fileUrl = $result['ObjectURL'];

    // 将文件URL保存到数据库或其他位置
}

이 코드는 사용 AWS SDK는 S3Client 인스턴스를 생성하고 AWS 자격 증명 및 구성을 사용하여 인스턴스를 초기화합니다. 그런 다음 요청에서 파일을 읽고 Laravel 애플리케이션에 저장한 다음 putObject 메서드를 사용하여 Amazon S3에 업로드합니다. ACL 옵션은 업로드 후 파일에 공개적으로 액세스할 수 있도록 public-read로 설정됩니다.

파일을 Amazon S3에 업로드한 후 파일의 URL을 데이터베이스나 다른 위치에 저장하여 애플리케이션에 파일을 표시할 수 있습니다.

Amazon S3에서 파일 다운로드

Amazon S3에서 파일을 다운로드하려면 aws-sdk-php 라이브러리의 getObject 메서드를 사용할 수 있습니다. 다음은 파일을 다운로드하고 이를 사용자 컴퓨터에 저장하기 위한 샘플 코드입니다.

use AwsS3S3Client;
use IlluminateHttpRequest;

public function download($fileName)
{
    $s3 = new S3Client([
        'version' => 'latest',
        'region'  => config('aws.region'),
        'credentials' => [
            'key'    => config('aws.key'),
            'secret' => config('aws.secret'),
        ],
    ]);

    $bucketName = config('aws.bucket');

    $result = $s3->getObject([
        'Bucket' => $bucketName,
        'Key'    => $fileName,
    ]);

    $fileContent = $result['Body']->getContents();

    return response($fileContent, 200, [
        'Content-Type'        => $result['ContentType'],
        'Content-Disposition' => 'attachment;filename="' . $fileName . '"',
    ]);
}

이 코드는 Amazon S3에서 파일 이름으로 getObject 요청을 생성하고 S3에서 파일을 가져옵니다. 그런 다음 파일 내용을 $fileContent 변수에 저장하고 응답으로 사용자 컴퓨터에 보냅니다. 응답은 브라우저에서 파일을 열지 않고 다운로드해야 함을 브라우저에 알리기 위해 Content-Type 헤더가 있는 파일 콘텐츠와 Content-Disposition 헤더가 있는 첨부 파일입니다.

Summary

이 글에서는 Laravel 애플리케이션에서 Amazon S3 파일 스토리지 서비스를 사용하는 방법을 소개했습니다. aws-sdk-php 라이브러리를 설치하고 Amazon S3와 상호 작용하는 데 필요한 자격 증명 및 구성을 구성하는 방법을 논의했습니다. 또한 파일을 업로드하고 다운로드하는 방법도 시연했습니다. 이러한 기술을 사용하면 쉽게 Amazon S3에 파일을 업로드하고 Laravel 애플리케이션에서 다운로드할 수 있습니다.

위 내용은 라라벨 s3 사용법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.