CakePHP2.x系で画像のアップロードフォーム

CakePHP2.x系で画像のアップロードフォーム

CakePHP2.x系で画像のアップロードフォームを作りたかったので調べたところ、アップロードの先の格納方法が2通りある事に気づき、両方やってみたのでメモしておきます。

①アップロードした画像をデータベースに格納する方法

テーブル定義例

CREATE TABLE tests (
 id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
 front_image_name VARCHAR(50),
 front_image_contents mediumblob,
 created DATETIME DEFAULT NULL,
 modified DATETIME DEFAULT NULL,
 deleted DATETIME DEFAULT NULL
);

front_image_nameはファイル名になります。

front_image_contentsはファイルになります。blobだと64KBほどしか保存できないようなので、mediumblob(16MBくらい)にしました。

フォーム(add.php)

<?php
echo $this->Form->create('Tets', array('type' => 'file'));
echo $this->Form->input('front_image', array('type' => 'file', 'label' => '画像(表)'));
echo $this->Form->input('created');
echo $this->Form->input('modified');
echo $this->Form->input('deleted');
echo $this->Form->end('Save Toretta');
?>

コントローラー(TestsController.php)

if ($this->request->is('post')) {
  $this->request->data['Test']['front_image_name'] = $this->request->data['Test']['front_image']['name'];
  $this->request->data['Test']['front_image_contents'] = file_get_contents($this->request->data['Test']['front_image']['tmp_name']);
}
$this->Test->create();
$this->Test->save($this->request->data);

$this->request->data[‘Test’][‘front_image’][‘tmp_name’]は「/tmp/ふぁいるめい」みたいな感じになっていたので、file_get_contentsでバイナリデータにしてDBに格納できました。

②アップロードした画像をディレクトリに格納する方法

テーブル定義例

CREATE TABLE tests (
 id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
 created DATETIME DEFAULT NULL,
 modified DATETIME DEFAULT NULL,
 deleted DATETIME DEFAULT NULL
);

①と比べ、画像に関する項目がいらなくなりました。

フォーム(add.php)

<?php
echo $this->Form->create('Tets', array('type' => 'file'));
echo $this->Form->input('front_image', array('type' => 'file', 'label' => '画像(表)'));
echo $this->Form->input('created');
echo $this->Form->input('modified');
echo $this->Form->input('deleted');
echo $this->Form->end('Save Toretta');
?>

①と同じです。

コントローラー(TestsController.php)

if ($this->request->is('post')) {
  move_uploaded_file($this->request->data['Test']['front_image']['tmp_name'], '/files/front_' . $this->request->data['Test']['created'] . '.jpg');
}
$this->Test->create();
$this->Test->save($this->request->data);

指定ディレクトリを決めて、その中にIDなどでファイル名をつけて格納しました。

画像アップロードのコントローラーとビューのコードをまとめました。

https://normalblog.net/system/cakephp2-x-file-upload-matome/

参考サイト様

http://bashalog.c-brains.jp/10/06/05-074544.php

http://kwski.net/cakephp-2-x/1152/

http://blog.s-giken.net/24.html

http://www.almondlab.jp/labs/1043

Comments

No comments yet. Why don’t you start the discussion?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です