Maison  >  Article  >  développement back-end  >  Comment télécharger des fichiers dans yii2 ?

Comment télécharger des fichiers dans yii2 ?

巴扎黑
巴扎黑original
2017-08-17 08:13:595231parcourir

Comment télécharger des fichiers dans yii2 ?

Yii2 UploadedFile implémente le téléchargement de fichiers

Pour télécharger des fichiers dans Yii, vous utilisez généralement la classe yiiwebUploadedFile, qui télécharge chaque fichier Le fichier est encapsulé dans un objet UploadedFile. En combinant yiiwidgetsActiveForm et des modèles, vous pouvez facilement implémenter un mécanisme de téléchargement de fichiers sécurisé.

1. Téléchargement d'un seul fichier

Créez d'abord un modèle models/UploadForm.php avec le contenu suivant

namespace app\models;

use yii\base\Model;
use yii\web\UploadedFile;

/**
 * UploadForm is the model behind the upload form.
 */
class UploadForm extends Model
{
    /**
     * @var UploadedFile file attribute
     */
    public $file;

    /**
     * @return array the validation rules.
     */
    public function rules()
    {
        return [
            [['file'], 'file'],
        ];
    }
}

Créez un autre fichier de vue avec le contenu suivant

<?php
use yii\widgets\ActiveForm;
?>

<?php $form = ActiveForm::begin([&#39;options&#39; => [&#39;enctype&#39; => &#39;multipart/form-data&#39;]]) ?>

<?= $form->field($model, &#39;file&#39;)->fileInput() ?>

<button>Submit</button>

<?php ActiveForm::end() ?>

Enfin, créez un fichier de contrôleur avec le contenu suivant

namespace app\controllers;

use Yii;
use yii\web\Controller;
use app\models\UploadForm;
use yii\web\UploadedFile;

class SiteController extends Controller
{
    public function actionUpload()
    {
        $model = new UploadForm();

        if (Yii::$app->request->isPost) {
            $model->file = UploadedFile::getInstance($model, &#39;file&#39;);

            if ($model->file && $model->validate()) {                
                $model->file->saveAs(&#39;uploads/&#39; . $model->file->baseName . &#39;.&#39; . $model->file->extension);
            }
        }

        return $this->render(&#39;upload&#39;, [&#39;model&#39; => $model]);
    }
}

Notez que nous n'utilisons pas model->load (.. .), utilisez plutôt UploadedFile::getInstance(...). La différence est que ce dernier n'exécutera pas $model->validate(), vous devez donc exécuter manuellement $model->validate() pour vérifier la validité des données. Si la vérification réussit, le fichier téléchargé est enregistré dans le dossier des téléchargements, c'est-à-dire des téléchargements dans le répertoire Web.

Quelques options de configuration facultatives
Le fichier téléchargé ne peut pas être vide

public function rules(){
    return [
        [[&#39;file&#39;], &#39;file&#39;, &#39;skipOnEmpty&#39; => false],
    ];
}

Le type de téléchargement peut être vérifié non seulement en fonction de l'extension, mais également en fonction du contenu du fichier

public function rules(){
    return [
        [[&#39;file&#39;], &#39;file&#39;, &#39;extensions&#39; => &#39;jpg, png&#39;, &#39;mimeTypes&#39; => &#39;image/jpeg, image/png&#39;,],
    ];
}

2. Téléchargement de plusieurs fichiers

Si vous souhaitez télécharger plusieurs fichiers à la fois, il vous suffit d'ajuster quelques paramètres pour atteindre l'objectif

Modèle :

class UploadForm extends Model
{
    /**
     * @var UploadedFile|Null file attribute
     */
    public $file;

    /**
     * @return array the validation rules.
     */
    public function rules()
    {
        return [
            [[&#39;file&#39;], &#39;file&#39;, &#39;maxFiles&#39; => 10], // <--- here!
        ];
    }
}

Vue :

<?php
use yii\widgets\ActiveForm;

$form = ActiveForm::begin([&#39;options&#39; => [&#39;enctype&#39; => &#39;multipart/form-data&#39;]]);
?>

<?= $form->field($model, &#39;file[]&#39;)->fileInput([&#39;multiple&#39; => true]) ?>

    <button>Submit</button>

<?php ActiveForm::end(); ?>

La différence avec le téléchargement d'un fichier unique est la phrase suivante

$form->field($model, &#39;file[]&#39;)->fileInput([&#39;multiple&#39; => true])

Contrôleur :

namespace app\controllers;

use Yii;
use yii\web\Controller;
use app\models\UploadForm;
use yii\web\UploadedFile;

class SiteController extends Controller
{
    public function actionUpload()
    {
        $model = new UploadForm();

        if (Yii::$app->request->isPost) {
            $model->file = UploadedFile::getInstances($model, &#39;file&#39;);

            if ($model->file && $model->validate()) {
                foreach ($model->file as $file) {
                    $file->saveAs(&#39;uploads/&#39; . $file->baseName . &#39;.&#39; . $file->extension);
                }
            }
        }

        return $this->render(&#39;upload&#39;, [&#39;model&#39; => $model]);
    }
}

De cette façon, plusieurs fichiers peuvent être téléchargés.

Pour plus de connaissances connexes, veuillez visiter le Site Web PHP chinois ! !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn