CAKEPHPの画像アップロード用のプラグインUploadPackをカスタマイズで自由に画像の名前を変える!

 - 

 -  >

 -  プログラミング

あるCEKAPHPでの開発で画像のアップロード機能をプラグインのUploadPackを使用して実装しました。

CAKEでの画像アップロード方法を調べるとだいたいUploadPackに関する記事が出てきますが、けっこうシンプルに使うこともできて便利なプラグインです。

ただ、画像のファイル名を少しいじりたくて、変更したので、その方法書いていきます。

 

File uploads1

UploadPackの基本的な使い方

まず、プラグインのUploadPackはこちらからダウンロードすることができます。
szajbus/uploadpack: Easy way to handle file uploads in CakePHP.

そして、ダウンロードしたファイルを解凍して/app/Pluginの中にいれます。フォルダ名は「UploadPack」等にして下さい。

 

cakePHPにおけるプラグインの使い方

プラグインを使用可能にするのはかなり簡単です。app/Config/bootstrap.php

 

コントローラー・モデルで使用可能にする

まずは、コントローラーでUploadPack.Uploadを読み込み使用可能な状態にします。

続いて、モデルで画像アップロード時の画質、サイズ、どのディレクトリに画像をアップロードするのかなどを設定していきます。

DBのテーブル名は、「image_file_name」など「〜_file_name」に基本的にはして下さい。(後述しますが、変えて_file_nameなしでも恐らく大丈夫です。未検証です)

 

ここでのオプションなどはこちらの記事が詳しいです。
CakePHP画像リサイズ最強プラグインUploadPackをCake初心者でも分かるよう徹底解説-ITかあさん

かなり丁寧な解説記事になっていますので、この記事で使い方がよくわからないという方は、こちらも参考にしてみてください。画像のファイル名についてのみ引用させていただきます。

:app – CakePHPのappフォルダ
:webroot – webrootフォルダ
:model – テーブルと同じ名称
:id – id
:basename – ファイルの元ファイル名
:extension – ファイルの元ファイルの拡張子にあたる部分
:style – thumbnailなど、任意の名称。
:attachment – フィールド名と同じ部分で今回だと「img」
:hash – 元ファイル名をMD5でハッシュ化+Security.salt

CakePHP画像リサイズ最強プラグインUploadPackをCake初心者でも分かるよう徹底解説-ITかあさん

hash画像のファイル名のオプションの一つであるhashの処理これから書き換えていきます。デフォルトでは、画像名をハッシュ化しますが、タイムスタンプをハッシュ化するように書き換えます。

 

データベースに書き込みを行うための処理を変える

/Applications/MAMP/htdocs/scouter_user/app/Plugin/UploadPack/Model/Behavior/UploadBehavior.php
の48行目くらいにデータベースに書き込みを行うための記述が書かれています。

 

何がどのようになっているのか気になる方はlogを取りながらどのような構成になっているのか見てみて下さい。だいぶ前に書いたコードなのでもう少し簡略化できそうな気もしますが、これでタイムスタンプをハッシュ化した名前をDBに保存することができます。

元の処理を見るとわかりますが、_file_nameとDBのテーブル名につけるのは、このように画像サイズやコンテンツタイプも同時に管理することができるようにするためです。

 

サーバーに保存するファイル名を変更する

225行目くらいにこのような、

 

このようにすることで、画像名だけを呼び出すことができればいいので、違うアプリケーションからでもこの画像名を呼び出やすいです。

 

UploadPackを使う上でのハマリポイント

ついでに、画像のアップロード機能を作成し、このプラグインを使っていく中で、いくつかハマることがあったので、それもメモを兼ねて書いておきます。

画像アップロード用のフォームの設定がされていない

一度これで数時間どハマリし、それ移行もちょっとだけハマったことがあるのがこれです。

フォームで画像などをアップロードできるようにするためには、フォームにこれを設定する必要があります。こういう根本的なミスでドハマリするのはアホらしいので気をつけて下さい。

フォームヘルパーで書くとこんな感じですね。

 

mampなどローカルだとできるけど、本番サーバーではできない

PHPの設定で画像のアップロードの容量が小さい
・php-gd(画像のアップロードなど処理するPHPのライブラリ)
・フォルダのパーミッションの関係でフォルダにアップロードできない

 

他にも原因はありえますが、これらの原因であることが多いようです。phpの設定がこれをcakeだとviewに書くだけで確認することができます。

 

画像の容量の設定はこのように確認することができます。

ブラウザ上で以下3つのワードを検索してください。(Ctrl+Fでページ内を検索できます)

memory_limit (メモリ使用量の上限)
post_max_size (POSTデータの最大サイズ ※1回のアップロードファイルすべての合計サイズ)
upload_max_filesize  (1ファイルあたりの最大アップロードサイズ)

サーバーのアップロードファイルの最大容量の確認と容量制限の変更|PHP工房より)/p>

 

php-gdnについても同様に確認できます。

NewImage

GDモジュールを有効にする – JpGraphのインストールと環境設定 – JpGraphを使ったグラフの描画より)

 

ちょっと初心者向けの解説が飛び飛びになってしましましたが・・・・

これで、通情の使い方カスタマイズした使い方ができるかなと思います。

 

関連記事・書籍はこちら。

szajbus/uploadpack: Easy way to handle file uploads in CakePHP.
CakePHP画像リサイズ最強プラグインUploadPackをCake初心者でも分かるよう徹底解説-ITかあさん
CakePHPのファイルアップロードプラグイン「UploadPack」を使ってみた | webOpixel

Facebookでシェアする

Twitterでシェアする

はてなブックマークに追加

 更新をチェックする! follow us in feedly

カスタム検索

Popular Post

Copyright© 新卒フリーランサーのブログ!2016 All Rights Reserved.