CakePHP2.X でファイルのアップロード•ダウンロード

TABLE

[php]
CREATE TABLE `uploads` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`file_name` varchar(50) DEFAULT NULL,
`created` datetime DEFAULT NULL,
`modified` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;
[/php]

UploadsController[add]

[php]
//UploadsController
//新規作成
public function add() {
if ($this->request->is(‘post’)) {
$tmp = $this->request->data[‘Upload’][‘file’][‘tmp_name’];
if(is_uploaded_file($tmp)) {
$file_name = basename($this->request->data[‘Upload’][‘file’][‘name’]);
$file = WWW_ROOT.’files’.DS.$file_name;
if (move_uploaded_file($tmp, $file)) {
$this->Upload->create();
$this->request->data[‘Upload’][‘file_name’] = $file_name;
if ($this->Upload->save($this->request->data)) {
$this->Session->setFlash(__(‘The upload has been saved’));
$this->redirect(array(‘action’ => ‘index’));
} else {
$this->Session->setFlash(__(‘The upload could not be saved. Please, try again.’));
}
}
}
}
}
[/php]

ダウンロード Mediaクラス

[php]
//UploadsController
//ダウンロード Mediaクラス
public function download($id) {
$this->viewClass = ‘Media’;
$this->Upload->id = $id;
$this->Upload->recursive = -1;
$data = $this->Upload->read();
$params = array(
‘id’=>basename($data[‘Upload’][‘file_name’]),
‘name’=>preg_replace("/.[^.]+$/","",$data[‘Upload’][‘file_name’]),
‘download’=>true,
//’extension’=>$data[‘Upload’][‘extension’],
‘path’=> ‘files’ . DS
);
$this->set($params);
}
[/php]

index View

[php]
//index View
<table cellpadding="0" cellspacing="0">
<tr>
<th><?php echo __(‘id’); ?></th>
<th><?php echo __(‘file_name’); ?></th>
<th><?php echo __(‘created’); ?></th>
</tr>
<?php foreach ($uploads as $upload) : ?>
<tr>
<td><?php echo h($upload[‘Upload’][‘id’]); ?></td>
<td><?php echo h($upload[‘Upload’][‘file_name’]); ?></td>
<td><?php echo h($upload[‘Upload’][‘created’]); ?></td>
<td><?php echo $this->Html->link($upload[‘Upload’][‘file_name’], array(‘controller’ => ‘uploads’, ‘action’ => ‘download’, $upload[‘Upload’][‘id’])); ?></td>
</tr>
<?php endforeach; ?>
</table>
[/php]

Add View

[php]
<?php echo $this->Form->create(‘Upload’, array(‘action’ => ‘add’, ‘type’ => ‘file’)); ?>
<fieldset>
<legend><?php echo __(‘Add Upload’); ?></legend>
<?php echo $this->Form->file(‘file’); ?>
</fieldset>
<?php echo $this->Form->end(__(‘Submit’));?>
[/php]
参考:http://w.builwing.info/2012/06/20/cakephp2-1%E3%81%A7%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89%EF%BC%88%E5%AE%9F%E8%B7%B5%E7%B7%A8%E3%81%9D%E3%81%AE9%EF%BC%89/

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

コメントを残す

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