
CakePHPを使って画像のアップロードをしてみました。
色々プラグインもありましたが、
取り合えず、普通にファイルアップしてみました。
画像をアップするためのビューを作成
(例)Post/fileup.ctp
echo $this->Form->create('Post', array('type'=>'file', 'enctype' => 'multipart/form-data'));
echo $this->Form->input('Post.image', array('label' => false, 'type' => 'file', 'multiple'));
echo $this->Form->submit('登録する', array('name' => 'submit'));
echo $this->Form->end();
画像をアップロードするために
1行目のcreateの部分でentypeでmultipart/form-dataを指定します。
次にファイルをアップするので
inputのtypeをfileとmultipleを指定します。
画像をアップするためのコントローラーを作成
(例)PostsController.php
public function fileup(){
if ($this->request->is('post') || $this->request->is('put')) {
//画像の保存
if($this->Post->save($this->request->data)){
//画像保存先のパス
$path = IMAGES;
$image = $this->request->data['Post']['image'];
$this->Session->setFlash('画像を登録しました');
move_uploaded_file($image['tmp_name'], $path . DS . $image['name']);
}else{
$this->Session->setFlash('画像が登録できませんでした');
}
}
}
保存先は今回はwebrootのimgフォルダに指定しました。(6行目)
フォームから受け取った値を変数に入れ直します(7行目)
受け取った値は以下のように連想配列になっています。
$image['name'];// もとのファイル名 $image['type'];// ファイルのMIME型 $image['size'];// ファイルのサイズ。バイト単位。 $image['tmp_name'] // アップロードされたファイルの、テンポラリファイル名
move_uploaded_file関数で画像ファイルをwebrootのimgフォルダに移動させます。
画像のバリデーション
(例)Post.php
//バリデーション
public $validate = array(
'image'=>array(
'rule1' => array(
//拡張子の指定
'rule' => array('extension',array('jpg','jpeg','gif','png')),
'message' => '画像ではありません。',
'allowEmpty' => true,
),
'rule2' => array(
//画像サイズの制限
'rule' => array('fileSize', '<=', '500000'),
'message' => '画像サイズは500KB以下でお願いします',
)
),
);
画像のバリデーションは簡単です。
コントローラーの説明で書いたように
フォームから受け取った値は連想配列に入ります。
後は普通のバリデーションと同じように
拡張子やファイルサイズをチェックするだけです。
連想配列で[‘name’]や[‘size’]の指定はしなくてもいいので
簡単にバリデーションを実装できます。
これで画像をアップロードして
webrootのimgフォルダにアップすることができました。
