AWS SDKでS3から画像を取得するのってどうやるんや?
てことで今回は、AWS SDKでS3から画像を取得する方法を解説します!
環境
言語:PHP
サービス:AWS S3
前提
・ライブラリ「aws-sdk」がインストールされていること
S3から画像を取得する前に
S3から画像を取得する前に、今回実施することを決めます。
今回やるのは、S3から画像を取得し、そのファイル情報をBase64でエンコードします。
これができれば、json内にファイル情報を詰め込み、クライアントに返却することができます。
画像取得方法
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 |
<?php namespace App\Services\Aws; use Aws\S3\S3Client; /** * S3サービス */ class S3Service { private $s3; public function __construct() { $this->s3= new S3Client([ 'version' => '*** version ***', 'region' => '*** region ***', 'credentials' => [ 'key' => '*** key ***', 'secret' => '*** secret ***', ], ]); } /** * オブジェクトを取得する * * @link https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#getobject * * @param string key キー(例:ファイル名) */ public function getObject($key) { return base64_encode( $this->s3->getObject([ 'Bucket' => '*** Bucket ***', 'Key' => $key, ])['Body'] ); } } |
上記がPHP(Laravel)での画像取得のソースコードになります。非常に簡単ですね。
※注意点として、ファイルの実態は「getObject」で返却されるjsonの「Body」にあります。僕はここで躓きました。
getObjectの概要
getObjectを使用して画像取得を行いますが、以下がざっくり概要になります。
Bucket | S3のバケット名 ※Bucket名が「sample」の場合、「sample」と指定します。 |
---|---|
Key | ファイル取得先フォルダ&ファイル名 ※ファイル取得先が「sample/img/」でファイル名が「sample.png」の場合、「img/sample.png」と指定します。 |
まとめ
AWS SDKって情報が少ないから自分で試して試行錯誤するしかないですね。
公式も非常に分かりにくいので困ったもんです。
ではまた!