code: public function uploadFile($event)
      {
          if (!array_key_exists($this->attribute, $event->sender->attributes)) {
              throw new InvalidConfigException(Yii::t('wavecms/main', 'Attribute {attribute} not found in model {model}', ['attribute' => $this->attribute, 'model' => $event->sender->className()]));
          }
  
          $oldFile = false;
          if (isset($event->sender->oldAttributes[$this->attribute])) {
              $oldFile = $event->sender->oldAttributes[$this->attribute];
          }
  
          $uploadedFile = UploadedFile::getInstance($event->sender, $this->attribute);
  
          if (null !== $uploadedFile && $uploadedFile->size !== 0) {
  
              $folder = $this->getWebrootFolder();
  
              if ($oldFile) {
                  $this->unlinkFiles($oldFile);
              }
  
              $baseName = $uploadedFile->baseName;
              $fileName = $baseName . '.' . $uploadedFile->extension;
  
              while (@file_exists($folder . '/' . $fileName)) {
                  $baseName .= '_';
                  $fileName = $baseName . '.' . $uploadedFile->extension;
              }
  
              FileHelper::createDirectory($folder, 0777);
              $uploadedFile->saveAs($folder . '/' . $fileName);
  
              $event->sender->{$this->attribute} = $fileName;
          } else {
              if (Yii::$app->request->post($this->attribute . '_file_delete')) {
                  $this->unlinkFiles($oldFile);
                  $event->sender->{$this->attribute} = null;
              } else {
                  $event->sender->{$this->attribute} = $oldFile;
              }
          }
      }
docs: Upload files on save and update event
  @param $event
  @throws InvalidConfigException
  @throws \yii\base\Exception