将文件存储到 mySql BLOB Yii
Store File into mySql BLOB 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 | |
+---------+-------------+------+-----+---------+----------------+
我成功地制作了一个没有任何功能的文件上传小部件。可以 select 一个文件并按下提交按钮。但仅此而已。
$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();
现在我不知道如何制作一个控制器函数来将我的文件保存到我的数据库中。其中 "File"(DB filed) 是文件的实际内容,zname = 文件名,date 是实际上传日期,filetype = 文件类型。
有关更多信息,我对下载这样的文件有疑问:
好的,我所做的就是将此添加到视图中:
<?php echo $this->renderPartial('_form', array('model'=>$model)); ?>
控制器将 $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));
}
之前的保存功能是 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();
}
我想知道我是否以及如何将整个文件存储在我的数据库中,看起来像这样
+---------+-------------+------+-----+---------+----------------+
| 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 | |
+---------+-------------+------+-----+---------+----------------+
我成功地制作了一个没有任何功能的文件上传小部件。可以 select 一个文件并按下提交按钮。但仅此而已。
$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();
现在我不知道如何制作一个控制器函数来将我的文件保存到我的数据库中。其中 "File"(DB filed) 是文件的实际内容,zname = 文件名,date 是实际上传日期,filetype = 文件类型。
有关更多信息,我对下载这样的文件有疑问:
好的,我所做的就是将此添加到视图中:
<?php echo $this->renderPartial('_form', array('model'=>$model)); ?>
控制器将 $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));
}
之前的保存功能是 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();
}