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));
|
cs |
제가 개발할 당시에는 ->get('ObjectURL') 로 나오는 URL은 바뀌거나 할 가능성이 있어서 sha1 하여 사용한 $key 변수를
데이터베이스에 저장하고 그것만 가져다가 쓰는 방식이였습니다.
그러므로 일반적인 경우에는
$bin = $result->get('ObjectURL'); 을 이용하여 이미지 주소를 전달받아 사용하시면 될 것 같습니다.
반응형