嗨,在过去的两天里,我一直在阅读和阅读很多关于将文件保存到Yii文件夹的教程,而且到目前为止他们都没有工作过。我有以下表格:
<div class="form">
<?php $form = $this->beginWidget('CActiveForm', array(
'htmlOptions' => array('enctype' => 'multipart/form-data')
)); ?>
<?php echo $form->errorSummary($model); ?>
<div class="row">
<?php echo $form->labelEx($model,'Binaryfile'); ?>
<?php echo $form->fileField($model,'uploadedFile'); ?>
<?php echo $form->error($model,'uploadedFile'); ?>
</div>
<div class="row buttons">
<?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
</div>
endWidget(); ?&GT;
文件字段将代码提交到mysql数据库中的BLOB字段。 控制器如下:
public function actionCreate()
{
$model=new Estudos;
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['Estudos']))
{
$model->attributes=$_POST['Estudos'];
$model->binaryfile = CUploadedFile::getInstance($model,'binaryfile'); // grava na bd no campo binaryfile
// $model->binaryfile->saveAs(Yii::app()->params['uploadPath']);
if($model->save())
$this->redirect(array('view','id'=>$model->id));
}
$this->render('create',array(
'model'=>$model,
));
}
模型就是这个:
public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
array('fileName', 'length', 'max'=>100),
array('fileType', 'length', 'max'=>50),
array('binaryfile', 'safe'),
// The following rule is used by search().
// @todo Please remove those attributes that should not be searched.
array('id, fileName, fileType, binaryfile', 'safe', 'on'=>'search'),
);
}
public $uploadedFile;
// Gravar imagem na base de dados - cria blob field
public function beforeSave()
{
if ($file = CUploadedFile::getInstance($this, 'uploadedFile'))
{
$this->fileName = $file->name;
$this->fileType = $file->type;
$this->binaryfile = file_get_contents($file->tempName);
}
return parent::beforeSave();
}
代码可以将文件存储为BLOB字段,但我需要更改代码以将文件存储在images文件夹中,然后显示允许在任何文件中打开文件的链接(pdf文件)浏览器。 为了将文件存储在images文件夹中,我在我的控制器actionCreate中尝试了saveAs(),但是Yii冻结了,网页空白而没有错误,只是空白。
**任何人都可以帮助我......我非常需要这个。提前谢谢了。 **
答案 0 :(得分:1)
检查此链接,在此链接中说明怎么做... http://www.yiiframework.com/wiki/2/how-to-upload-a-file-using-a-model/
答案 1 :(得分:0)
最后我自己想通了。答案很简单,但花了我4天的时间来写它。 在我的actionCreate()中,我做了:
public function actionCreate()
{
$model=new Estudos;
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['Estudos']))
{
$model->attributes=$_POST['Estudos'];
$model->uploadedFile=CUploadedFile::getInstance($model,'uploadedFile');
if($model->save())
$model->uploadedFile->saveAs("pdfs/".$model->uploadedFile,true);
$this->redirect(array('view','id'=>$model->id));
}
$this->render('create',array(
'model'=>$model,
));
}
**这样,saveAs()函数像魅力一样工作,现在将我的提交文件保存在pdfs文件夹中。 下一步是尝试找出如何为提交到pdfs文件夹的所有文件创建链接。 也许使用foreach()循环。
最好的问候...... **