将文件存储到mySql BLOB Yii中

时间:2015-03-11 16:55:50

标签: php mysql yii

我想知道我是否以及如何将整个文件存储在我的数据库中,如下所示

+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| id      | int(11)     | NO   | PRI | NULL    | auto_increment |
| file    | blob        | NO   |     | NULL    |                |
| USER_id | int(11)     | NO   | MUL | NULL    |                |
| zname   | varchar(40) | NO   |     | NULL    |                |
| date    | date        | NO   |     | NULL    |                |
| filetyp | varchar(10) | NO   |     | NULL    |                |
+---------+-------------+------+-----+---------+----------------+

我设法制作了一个文件上传小工具,背后没有任何功能。可以选择文件并按“提交”按钮。但就是这样。

    $form = $this->beginWidget(
        'CActiveForm',
        array(
            'id' => 'upload-form',
            'enableAjaxValidation' => false,
            'htmlOptions' => array('enctype' => 'multipart/form-data'),
        )
    );

echo $form->labelEx($model,'');
echo $form->fileField($model,'image');
echo $form->error($model,'image');
echo CHtml::submitButton('Submit');
$this->endWidget();

现在我不知道如何制作一个将我的文件保存到我的数据库中的Controller Funktion。如果“文件”(DB文件)是文件的文件名,则zname =文件名,日期为上载的日期,文件类型为文件类型。

有关更多信息,我有一个关于下载文件的问题: Download link from Database BLOB with yii Framework

1 个答案:

答案 0 :(得分:0)

好的我做的是将其添加到视图中:

<?php echo $this->renderPartial('_form', array('model'=>$model)); ?>

Controller有$ model作为USERZ模块(DB) 被调用的表单看起来像这样

<div class="form">

<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'userz-form',
    'enableAjaxValidation'=>false,
    'htmlOptions' => array('enctype' => 'multipart/form-data'),
)); ?>


    <div class="row">
        <?php echo $form->fileField($model,'file'); ?>
        <?php echo $form->error($model,'file'); ?>
    </div>

    <div class="row buttons">
        <?php echo CHtml::submitButton($model->isNewRecord ? 'Submit' : 'Save'); ?>
    </div>

<?php $this->endWidget(); ?>

</div>

我还在控制器中添加了一个if子句:

if(isset($_POST['USERZ']))
        {
            $model->attributes=$_POST['USERZ'];
            $model->file=CUploadedFile::getInstance($model,'file');
            $model->beforeSave();
            if($model->save())
                $this->redirect(array('view','id'=>$model->id));
        }

the bevore Save funktion是USERZ模型中的一个功能,它看起来像这样,并且可以解决文件中的所有内容:

public function beforeSave()
{
    if($file=CUploadedFile::getInstance($this,'file'))
    {
        $this->zname=$file->name;
        $this->filetype=$file->type;
        $this->date=date('Y-m-d');
        $this->USER_id=Yii::app()->user->getId();
        $this->file=file_get_contents($file->tempName);
    }

return parent::beforeSave();
}