본문 바로가기
웹 개발 이야기/php

[PHP] AWS S3 Bucket에 파일 업로드

by Gommin 2023. 3. 16.

* 현 예제는 그누보드에서 작성하였다.
* AWS 접속 후 [보안 자격 증명] 으로 이동하여 액세스 키를 생성해야한다.
* 생성한 버킷의 권한을 퍼블릭으로 설정해준다.

aws.zip
3.79MB

 

(버킷 정책 샘플)

{

    "Version": "2012-10-17",

    "Statement": [

        {

            "Sid": "Statement1",

            "Effect": "Allow",

            "Principal": "*",

            "Action": "s3:GetObject",

            "Resource": "arn:aws:s3:::버킷명/*"

        }

    ]

}

 

$cf =array();
$cf['AWS_KEY'] = '액세스 키 ID';
$cf['AWS_SECRET'] = '비밀 액세스 키';
$cf['aws_bucket'] = '버킷명';
$cf['s3Client'] = [
    'version' => 'latest',
    'region'  => 'AWS 리전(ex: ap-northeast-2)',
    'credentials' => array(
        'key' => $cf['AWS_KEY'],
        'secret'  => $cf['AWS_SECRET'],
    )
];

// 다운로드한 SDK 파일의 autoloader를 불러온다.
include_once(G5_PATH.'/aws/aws-autoloader.php');

// AWS S3에 파일 업로드할 때 필요한 클래스들을 불러온다.
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
use Aws\Credentials\CredentialProvider;

// 접속
$s3Client = new Aws\S3\S3Client($cf['s3Client']);

if($_FILES['l_filename_edu']['name']!=''){
    // 파일을 첨부했을 때

    $ext = substr($_FILES['l_filename_edu']['name'], strrpos($_FILES['l_filename_edu']['name'], '.') + 1);
    $file_name = "edufile".$ca_idx1.$ca_idx2.date("YmdHis").'.'.$ext;
    $s3_path = "media/lecture/edufile/" . $file_name; // 업로드할 위치와 파일명 입니다.

    try{
        $result = $s3Client->putObject([
            'Bucket' => $cf['aws_bucket'],
            'Key' => $s3_path,
            'SourceFile' => $_FILES['l_filename_edu']['tmp_name'],
        ]);

        if($result['@metadata']['statusCode']==200){
            $l_filename_edu = $file_name;
            $l_filename_edu_origin = $_FILES['l_filename_edu']['name'];
        }
    }catch (S3Exception $e){
        var_dump($e);
        echo "<br><br>";
        exit();
    }

}

댓글