Yii - Téléchargement de fichiers

Vous pouvez facilement implémenter une fonction de téléchargement de fichiers à l'aide de yii\web\UploadedFile, models et yii\widgets\ActiveForm.

Créer un annuaire ‘uploads’dans le dossier racine. Ce répertoire contiendra toutes les images téléchargées. Pour télécharger un seul fichier, vous devez créer un modèle et un attribut du modèle pour l'instance de fichier téléchargé. Vous devez également valider le téléchargement du fichier.

Step 1 - À l'intérieur du models dossier, créez un fichier appelé UploadImageForm.php avec le contenu suivant.

<?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;
         }
      }
   }
?>

le imageL'attribut est utilisé pour conserver l'instance de fichier. lefile la règle de validation garantit qu'un fichier a un png ou un jpgextension. La fonction de téléchargement valide le fichier et l'enregistre sur le serveur.

Step 2 - Maintenant, ajoutez le actionUploadImage fonction à la 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 - Lorsque le formulaire est soumis, nous appelons le yii\web\UploadedFile::getInstance() fonction pour représenter le fichier téléchargé comme un UploadedFileexemple. Ensuite, nous validons le fichier et le sauvegardons sur le serveur.

Step 4 - Ensuite, créez un upload.php afficher le fichier dans le views/site annuaire.

<?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() ?>

N'oubliez pas d'ajouter le enctype option lorsque vous téléchargez un fichier. The fileInput() La méthode rend le code html suivant -

<input type = "file">

Le code html ci-dessus permet aux utilisateurs de sélectionner et de télécharger des fichiers.

Step 5 - Maintenant, si tu vas à http://localhost:8080/index.php?r=site/upload-image, vous verrez ce qui suit.

Step 6- Sélectionnez une image à télécharger et cliquez sur le bouton «soumettre». Le fichier sera enregistré sur le serveur à l'intérieur du‘uploads’ dossier.