Yii - Przesyłanie plików

Możesz łatwo zaimplementować funkcję przesyłania plików za pomocą yii\web\UploadedFile, models i yii\widgets\ActiveForm.

Utwórz katalog ‘uploads’w folderze głównym. W tym katalogu będą przechowywane wszystkie przesłane obrazy. Aby przesłać pojedynczy plik, musisz utworzyć model i atrybut modelu dla przesłanej instancji pliku. Powinieneś także sprawdzić poprawność przesłania pliku.

Step 1 - Wewnątrz models folder, utwórz plik o nazwie UploadImageForm.php z następującą treścią.

<?php
   namespace app\models;
   use yii\base\Model;
   class UploadImageForm extends Model {
      public $image; public function rules() { return [ [['image'], 'file', 'skipOnEmpty' => false, 'extensions' => 'jpg, png'], ]; } public function upload() { if ($this->validate()) {
            $this->image->saveAs('../uploads/' . $this->image->baseName . '.' .
               $this->image->extension);
            return true;
         } else {
            return false;
         }
      }
   }
?>

Plik imageatrybut jest używany do zachowania instancji pliku. Plikfile reguła walidacji zapewnia, że ​​plik ma rozszerzenie png lub a jpgrozbudowa. Funkcja przesyłania sprawdza poprawność pliku i zapisuje go na serwerze.

Step 2 - Teraz dodaj actionUploadImage funkcji do SiteController.

public function actionUploadImage() {
   $model = new UploadImageForm();
   if (Yii::$app->request->isPost) { $model->image = UploadedFile::getInstance($model, 'image'); if ($model->upload()) {
         // file is uploaded successfully
         echo "File successfully uploaded";
         return;
      }
   }
   return $this->render('upload', ['model' => $model]);
}

Step 3 - Po przesłaniu formularza dzwonimy do yii\web\UploadedFile::getInstance() funkcję reprezentującą przesłany plik jako plik UploadedFileinstancja. Następnie sprawdzamy plik i zapisujemy go na serwerze.

Step 4 - Następnie utwórz plik upload.php Wyświetl plik wewnątrz views/site informator.

<?php
   use yii\widgets\ActiveForm;
?>
<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']])?> <?= $form->field($model, 'image')->fileInput() ?>
   <button>Submit</button>
<?php ActiveForm::end() ?>

Pamiętaj, aby dodać enctype opcja podczas przesyłania pliku. The fileInput() metoda renderuje następujący kod html -

<input type = "file">

Powyższy kod html umożliwia użytkownikom wybieranie i przesyłanie plików.

Step 5 - Teraz, jeśli pójdziesz do http://localhost:8080/index.php?r=site/upload-imagezobaczysz, co następuje.

Step 6- Wybierz obraz do przesłania i kliknij przycisk „Prześlij”. Plik zostanie zapisany na serwerze wewnątrz pliku‘uploads’ teczka.