ファイルアップロード
yiiでファイルアップロードしてみる。アップロードしたファイルはMySQL BLOBに保存する。
テーブルを作る
create table `file` ( `id` INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, `name` varchar(255) not null, `type` varchar(64) not null, `size` float not null, `content` BLOB not null ) ;
モデルを作る
yiifile\protected\models\File.php
<?php class File extends CActiveRecord { public $name; public $type; public $size; public $content; public static function model($className=__CLASS__) { return parent::model($className); } }
createアクションを作る
yiifile\protected\controllers\FilesController.php
<?php class FilesController extends Controller { public function actionCreate() { $model = new File; if(isset($_POST['File'])) { $temp = CUploadedFile::getInstance($model, 'file'); $model->name = $temp->name; $model->type = $temp->type; $model->size = $temp->size; $model->content = file_get_contents($temp->tempName); unlink($temp->tempName); if($model->save()) $this->redirect(array('view','id'=>$model->id)); } $this->render('create',array( 'model'=>$model, )); } }
createビューを作る
yiifile\protected\views\files\create.php
<h1>Create File</h1> <?php $form=$this->beginWidget('CActiveForm', array( 'id'=>'entry-form', 'htmlOptions' => array('enctype'=>'multipart/form-data'), )); ?> <div class="row"> <?php echo $form->fileField($model,'file'); ?> </div> <div class="row buttons"> <?php echo CHtml::submitButton('Save'); ?> </div> <?php $this->endWidget(); ?>
Createページでファイルを選択し、SaveボタンをクリックするとFileテーブルに入ってるはず。
viewアクションを作る
アップロードしたファイルをブラウザで表示してみよう。
yiifile\protected\controllers\FilesController.php
<?php class FilesController extends Controller { public function actionView() { $model = File::model()->findByPk($_GET['id']); header('Content-Type: '.$model->type); echo $model->content; } }
これでアップロードするとブラウザで表示する。