【CakePHP3】AWS SDK for PHPでS3サーバーにファイルをアップロード!
「AWS SDK for PHP」というアマゾン公式ライブラリを使うと、PHPを使ってアマゾンのS3サーバーにファイルをアップロード・ダウンロードすることができます。
今回は「CakePHP3」でS3サーバーにファイルをアップロードする方法を説明します。
■「AWS SDK for PHP」のインストール
AWS SDK for PHPのインストールは「Composer」を使ってワンタッチでできます。
cakePHP3のディレクトリで以下のコマンドを打つとインストールされます。
php composer.phar require aws/aws-sdk-php
■ファイルをアップロード
ファイルをアップロードするコードは以下のような感じです。
自分のディレクトリにあるファイル「hogege.jpg」を、S3サーバーにアップップロードしています。
use Aws\S3\S3Client; public function initialize() { $this->config = [ 's3' => [ 'key' => 'hogehogehogegege', //S3アクセスのためのキー 'secret' => 'fugafugafugaga', //S3アクセスのためのシークレットキー 'bucket' => 'image.hogege.com', //S3バケット名 ] ]; $this->s3 = S3Client::factory([ 'credentials' => [ 'key' => $this->config['s3']['key'], 'secret' => $this->config['s3']['secret'] ], 'region' => 'ap-northeast-1', //リージョンは日本 'version' => 'latest' //バケットのバージョニングは最新 ]); } public function upload_img($post_id) { //アップロードするファイルのパス $filepath = dirname(__FILE__)."/temp/hogege.jpg"; //AWSに登録するオブジェクト・キー名 $keyname ="hogege.jpg"; //アップロード! try{ $result = $this->s3->putObject([ 'Bucket' => $this->config['s3']['bucket'], 'Key' => $keyname, 'SourceFile' => $filepath, 'StorageClass' => 'REDUCED_REDUNDANCY' //低冗長化モードを指定 ]); } catch (Exception $ex) { return false; } return true; }
ちなみに、他のサイトにあるファイルをかっぱらってきてS3にアップロードする場合は、以下のような感じでできます。
ちゃんとMIMEタイプを指定してあげないといけないのがポイントです。これをしないとMIMEタイプが「application/octet-stream」でアップロードされてしまいます・・。
//testes.jpgを取得する $img_data = file_get_contents("http://fugaga.com/testes.jpg"); //mime typeを判別 $finfo = finfo_open(FILEINFO_MIME_TYPE); $mime_type = finfo_buffer($finfo, $img_data); finfo_close($finfo); $keyname = 'testes.jpg'; //S3にアップロード $result = $this->s3->putObject([ 'Bucket' => $this->config['s3']['bucket'], 'Key' => $keyname, 'Body' => $img_data, 'ContentType' => $mime_type, 'StorageClass' => 'REDUCED_REDUNDANCY' //低冗長化モードを指定 ]);
アマゾンの公式ページにも詳しい解説が載ってるので、ぜひ見てみてください。
http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/UploadObjSingleOpPHP.html
以上!