【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
以上!