更新上传的文件 yii2

update the uploaded file yii2

我使用下面的方式上传图片并将其保存在服务器和数据库中。现在我想写一个控制器来更新上传的图片。怎么做???

控制器

public function actionInvitfile()
{
    $model = new Applicants();
    $imgName = Yii::$app->user->identity->id;

        if($model->load(Yii::$app->request->post())){
        $model->file = UploadedFile::getInstance($model, 'file');
        $model->file->saveAs('uploads/invitfile/' . $imgName . '.' . $model->file->extension);
        $model->invitations_file='uploads/invitfile/'. $imgName . '.' . $model->file->extension;
        $model->save(false);
        }
   return $this->goHome();
}

型号

    class Applicants extends \yii\db\ActiveRecord
{
    public $file;
    public static function tableName()
    {
        return 'applicants';
    }

    public function rules()
    {
        return [
            [['file'], 'file', 'skipOnEmpty' => true, 'extensions' => 'pdf'],
        ];
    }

请帮帮我!)

我认为这可行

public function actionUpdate($id)
    {
         $imgName = Yii::$app->user->identity->id;
         $model = Applicants->findModel($id);
        if($model->load(Yii::$app->request->post())){

         unlink($model->invitations_file); 


         $model->file = UploadedFile::getInstance($model, 'file');
         $model->file->saveAs('uploads/invitfile/' . $imgName . '.' . $model->file->extension);
         $model->invitations_file='uploads/invitfile/'. $imgName . '.' . $model->file->extension;
         $model->save(false);
        }
   return $this->goHome();

    }

但是这里有 kartij 博客的官方文档,您可以在其中了解更多信息并更好地回答您的问题:
http://webtips.krajee.com/advanced-upload-using-yii2-fileinput-widget/

如果你想更新单个图像,那么在更新函数中,在加载post变量之前,只需将旧图像保存在一个变量中。以下代码将对您有所帮助:

public function actionUpdate($id)
{
    $model = $this->findModel($id);
    $oldImage = $model->banner;

    if ($model->load(Yii::$app->request->post())) {

        //get picture data and save it
        $imageFile = \yii\web\UploadedFile::getInstance($model, 'banner');
        if($imageFile) {
            unlink(Yii::getAlias('@app').'/../../uploads/banners/' . $oldImage);

            $fileName = $imageFile->baseName.'_'.time().'.'.$imageFile->extension;
            $imageFile->saveAs(Yii::getAlias('@app').'/../../uploads/banners/' . $fileName);

            $model->banner = $fileName;
            $model->save();
        } else {
            $model->banner = $oldImage;
            $model->save(false);

        }

        return $this->redirect(['index']);
    } else {
        return $this->render('update', [
            'model' => $model,
        ]);
    }
}