在不删除 yii 中上传的文件的情况下更新记录

update a record without removing the uploaded file in yii

我需要在不更改或删除文件名(我的意思是文件)的情况下更新记录,或者再次重新插入文件,我该怎么做?

这是我的 actionCreate,我该如何写更新?

public function actionCreate() {
    $model = new Page;
    if (isset($_POST['Page'])) {
        $model->attributes = $_POST['Page'];
        $model->filename = CUploadedFile::getInstance($model, 'filename');
        if ($model->save()) {
            if ($model->filename !== null) {
                $dest = Yii::getPathOfAlias('application.uploads');
                $model->filename->saveAs($dest . '/' . $model->filename->name);

                $model->save();
            }
            $this->redirect(array('view', 'id' => $model->id));
        }
    }
    $this->render('create', array(
        'model' => $model,
    ));
}

所以请任何人找到解决方案

如果您不需要更改或删除 edit/update 中的文件名,则忽略文件名(和上传部分),假设文件已经上传并且您不希望 change/delete 它。

 public function actionUpdate($id) {
    $model = $this->loadModel($id);
    $file = $model->filename;
    if (isset($_POST['Page'])) {
        $model->attributes = $_POST['Page'];
        $model->filename = $file;
        if ($model->save()) {
            $this->redirect(array('view', 'id' => $model->id));
        }
    }
    $this->render('create', array(
        'model' => $model,
    ));
}

试试这个,它对我有用 -

protected 目录外创建一个 upload 文件夹,并给予 read/write 权限。

actionCreate 函数 -

public function actionCreate() {

   $model = new Page();

    if(isset($_POST['Page']) && !empty($_POST['Page'])){

        $model->attributes = $_POST['Page'];

        $rand = rand(1, 999);
        $myfile = CUploadedFile::getInstance($model, 'filename');
        $fileName = "{$rand}-{$myfile}";  //Generate unique file name

           if(!empty( $fileName)){
               $model->filename   = $fileName;
               $target_dir = realpath( Yii::getPathOfAlias('application') . '/../upload');
               $target_file = $target_dir . '/' . $fileName;

               if(!$myfile->saveAs($target_file)){ 
                  $model->addError('filename', 'File saving error');
               }
            }

        if(!$model->hasErrors() && $model->validate() && $model->save(false)) {
         $this->redirect(array('view', 'id'=>$model->id, 'msg'=>'success'));
       }
    }
}

actionUpdate 函数 -

public function actionUpdate() {

  $model = Page::model()->findbyPK($id);
  $model->scenario = 'update';

  if(isset($_POST['Page']) && !empty($_POST['Page'])){
     $model->attributes = $_POST['Page'];

     if(empty($_POST['Page']['filename'])) { $file_name = $model->filename; } //store existing file name into a variable if your uploading a file on update

     $rand = rand(1, 999);
     $myfile = CUploadedFile::getInstance($model, 'filename');
     $fileName = "{$rand}-{$myfile}";  //Generate unique file name

     if($model->validate()) {
       if(!empty($fileName)) {
           $model->filename = $fileName;
           $target_dir  = realpath( Yii::getPathOfAlias( 'application' ) . '/../upload');
           $target_file  = $target_dir . '/' . $fileName;

           if(!$myfile->saveAs($target_file)){ 
               $model->addError('filename', 'File saving error');
            }
        } 
      else {
             $model->filename = $file_name; //allow existing file name 
           }

     if( !$model->hasErrors() && $model->save(false) ) {
            $this->redirect(array('view', 'id'=>$model->id, 'msg'=>'update'));
          }
       }
  }

在模型规则数组中定义这个 -

array('filename', 'file', 'types'=>'jpg, jpeg, bmp, gif, png', 'allowEmpty'=>true, 'on'=>'insert, update')