もふもふ技術部

CakePHPのDatasourceを使ってAWS S3にファイルをアップロードする


AWSかわいいよAWS。
クラウドインフラしては最強なんじゃないでしょうか。前回はPHPから直接AWSのSDKを叩いてS3にファイルを置いてみましたが、今回はCakePHPのDatasource経由でぶんなげてみますね。

前回
AWS SDK for PHPを使ってS3にファイルをアップロードする

ちなみにDataSourceとは、Modelから実データに対して読み/書きする際に、実データとの間を取り持つ部分になります。

例えばModel経由でDB操作を行う際にもこのDataSourceを経由して行われることになり、MySQLはMySQL用のDataSourceが用意されていて、PostgresはPostgres用のDataSourceが存在してます。

なので、使用するDBを変更したい場合も設定ファイルからDataSourceを変更してあげれば済んでしまうので、Modelのロジックに手を入れる必要がありません。まあそんな感じのものですね。

んで、今回はAWS S3用のDataSourceをPluginとして公開されてる方がいらっしゃったので使わせていただきます。ありがとうございますありがとうございます。

http://tech.basicinc.jp/AWS,%20CakePHP/2013/06/15/cakephp_aws_s3_plugin/
https://github.com/zaru/Cakephp2_AWS_S3_DataSource

環境
Mac OSX Lion
CakePHP 2.3.6
PHP 5.4.20

画面からアップロードされたファイルをS3に放り込む

GithubのREADME読んで、大体そのまんま出来た感。
CakePHP本体のみのブランクの状態からやってます。

まずはPluginを落としてきましょう。

Pluginを読み込ませるなど。

Config/bootstrap.php

S3用のdatasourceの設定を追加します。
bucket名はs3phpとしています。

Config/database.php

S3を操作するためのモデルを作ります。
Model/Hoge.php

Controllerを作ります。

Controller/HogesController.php

ファイルアップロードするためのViewを作成します。

View/Hoge/index.ctp

こんな感じ。
s3cakephp_01

実行したらちゃんとアップロードされました。
s3cakephp_02

s3cakephp_03

表示されている画面のHTMLをファイルにしてS3に放り込む

要するに$this->render()した結果をファイルとしてS3に保存するということ。

Modelに変更ありませんね。
HTML文字列を取得してS3に投げるロジックをControllerに書いてみます。

Controller/HogesController.php

Viewにボタンを追加します。

View/Hoge/index.ctp

こんな感じ。
s3cakephp_04

出来ましたね!
s3cakephp_05

s3cakephp_06

S3のURLにアクセスすればhtmlが見えます。CSSがないからあれだけど。
s3cakephp_07

The following two tabs change content below.
原田 敦

原田 敦

日本CAWのエンジニア。もふもふ部の部長。得意分野はRuby on Railsを使った小規模WEBアプリケーションを高速で開発すること。週末の楽しみは一人お菓子パーティー。三度の飯より小動物をもふもふするのが好きです。