AWS S3 with endpoint putObject Example for PHP

2021. 2. 7. 05:10·Language/PHP

AWS SDK 를 이용하면서 S3에 endpoint를 적용하여 putObject 함수를 이용하는 예제입니다.

여러번 삽질을 했던 내용으로서 도움이 되실분이 계실까봐 올려봅니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?php
$allowedExts = array("gif", "jpeg", "jpg", "png");
 
if(isset($_FILES["image"])) {
    $file = $_FILES["image"];
    if ($file["error"] > 0 || $file["size"] <= 0) die("Exception Error : " . $file["error"]);
    $temp = explode("/", $file["type"]);
    $extension = end($temp);
    if (!in_array($extension, $allowedExts)) die($extension." format file is not allowed.");
    if (($file["size"]/1024/1024) > 2) die("It cannot exceed 2MB.");
} else {
    header("HTTP/1.1 401 Unauthorized");
    die();
}
 
require_once $_SERVER['DOCUMENT_ROOT'].'/vendor/autoload.php';
 
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
 
$bucket_name = '##########';
$access_key = '##########';
$secret_key = '##########';
 
try {
    $client = new S3Client([
        'version' => 'latest',
        'region' => 'REGION',
        'credentials' => [
            'key'    => $access_key,
            'secret' => $secret_key,
        ],
        'endpoint' => 'https://s3.REGION.ADDRESS.com',
        'signature' => 'v4'
    ]);
    
    $key = sha1($file["tmp_name"].microtime()) . '.' . $extension;
    
    $result = $client->putObject([
        'Bucket' => $bucket_name,
        'Key'    => $key,
        'Body'   => fopen($file["tmp_name"], 'r'),
        'ACL'    => 'public-read',
    ]);
} catch (S3Exception $e) {
    die($e->getMessage() . PHP_EOL);
}
 
$result->get('ObjectURL');
// $bin = $result->get('ObjectURL');
 
$response = array("response" => $key, "extension" => $extension);
die(json_encode($response));
Colored by Color Scripter
cs

 

제가 개발할 당시에는 ->get('ObjectURL') 로 나오는 URL은 바뀌거나 할 가능성이 있어서 sha1 하여 사용한 $key 변수를

데이터베이스에 저장하고 그것만 가져다가 쓰는 방식이였습니다.

그러므로 일반적인 경우에는

$bin = $result->get('ObjectURL'); 을 이용하여 이미지 주소를 전달받아 사용하시면 될 것 같습니다.

반응형
저작자표시 비영리 (새창열림)
'Language/PHP' 카테고리의 다른 글
  • Composer Error Fix - it is missing from your system. Install or enable PHP's fileinfo extension
  • PHP로 몇초전 몇분전 몇시간전 표시하기
  • php8.0 업데이트, JIT 도입과 성능향상
  • XML을 이용한 PHP EXCEL 시트별 제작 및 저장법
Kua
Kua
정보 공유, 개인 정리 공간 입니다.
  • Kua
    Kua's Miscellaneous
    Kua
    • 분류 전체보기 (185)
      • 대문 (2)
      • Tips (25)
        • Chrome (2)
        • Windows (4)
        • IDE (3)
        • 기타 (16)
      • CodingTest (44)
      • Language (20)
        • PHP (5)
        • C# (7)
        • Java (1)
        • Kotlin (7)
      • Framework & Runtime (16)
        • SpringBoot (12)
        • Node.js (2)
        • Vue.js (1)
        • Gradle (1)
      • DevOps (13)
        • Linux (1)
        • Docker (4)
        • Kubernetes (2)
        • Apache Kafka (1)
        • AWS (1)
      • 일상다반사 (53)
        • 도서 (1)
        • 개발 (8)
        • 후기 - IT (7)
        • 후기 - 일상 (13)
        • 차가리 (4)
        • 방송통신대학교 (4)
        • 음식 (2)
      • Games (12)
        • Minecraft (7)
        • VR (2)
        • 그외 (3)
  • 최근 글

  • 인기 글

  • 태그

    갤럭시
    코딩테스트
    spring
    Plugin
    후기
    Algorithm
    github
    Silver5
    Spring Boot
    error
    bronze2
    minecraft
    알고리즘
    bronze1
    Kotlin
    codingtest
    java
    Windows
    c#
    백준
  • 전체
    오늘
    어제
  • hELLO· Designed By정상우.v4.10.0
Kua
AWS S3 with endpoint putObject Example for PHP
상단으로

티스토리툴바