CakePHPでファイルアップロードを実装するときに選択肢は多々あると思いますが、私はもっぱらFilebinderプラグインを利用しています。古くからあるプラグインで、CakePHPの超便利なファイルアップロードプラグイン、FileBinderプラグインの使い方をまとめてみた。 ? INSPIRE TECHこちらの記事を読んで利用し始めたことを覚えています。*1
このプラグインが優れているのは
- 画像だけでなくファイルもアップロードできる
- ビヘイビアでファイルのバリデーションルールも提供している
- beforeAttach,afterAttachなどのフックメソッドがあること
などですね。
特に3番目のフックメソッドは、アップロード画像を一定サイズにリサイズしたりするのに便利で重宝していました。
そして、初めの頃には無かった最もありがたい機能が
- AWS S3に対応している
ことです。
ファイルアップロードのプラグインは他にもUploadやUploadPack、MediaPluginなんかがあるけど、S3に対応したものは無いんじゃないかな?*2
最近の案件はほとんどAWSで運用しているので、アップロードファイルをS3でストレージできると助かります。アップロードファイルをEC2に置くと、ソース以外の部分のバックアップを考えなければなりませんからメンテが大変です。
FilebinderはDBストレージも可能なので、もともと上記のような問題は回避できたのですが、コストやパフォーマンスを考えるとBDではなくS3にストレージするのがベストです。
で、本題。
先ほど上げた他のファイルアップロードプラグインにはサムネイル生成の機能があるのですが、Filebinderにはありませんでした。なのでサムネイルを作成する処理はフックメソッドで自前実装していたのですが、この問題を解決するプラグインがありました。
Imagebinder
Imagebinder pluginを使うと、Filebinderに簡単にサムネイル生成の機能を追加できます。
使い方はGithubに書かれたとおりにすれば迷うことは無いと思います。なので省略。
このプラグインの素晴らしいのは、ImageLabel
ヘルパーで画像を出力するときにサムネイルを作成してそれをキャッシュするところです。他のプラグインだとモデルで生成するサムネイルのパターンを定義してアップロード時にサムネイルを生成するものが多いですが、このプラグインだとヘルパーのimage
メソッドでwidth
を指定するだけなので、デザイナーがCakeを使えなくても問題なくサムネイルを吐き出せますし、デザインの調整も楽ですね。
この作り、なんというか、とても美しい。。
tie_comment