Yii Framework将提交的文件存储/保存到images文件夹

时间:2014-11-11 11:09:49

标签: php mysql yii frameworks

嗨,在过去的两天里,我一直在阅读和阅读很多关于将文件保存到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冻结了,网页空白而没有错误,只是空白。

**任何人都可以帮助我......我非常需要这个。提前谢谢了。 **

2 个答案:

答案 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()循环。

最好的问候...... **