Yii - 文件上传

  • 简述

    您可以借助yii\web\UploadedFile、modelsyii\widgets\ActiveForm轻松实现文件上传功能。
    在根文件夹中创建一个目录“上传” 。该目录将保存所有上传的图像。要上传单个文件,您需要为上传的文件实例创建模型和模型的属性。您还应该验证文件上传。
    第 1 步- 在模型文件夹中,创建一个名为UploadImageForm.php的文件,其内容如下。
    
    <?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;
             }
          }
       }
    ?>
    
    image属性用于保存文件实例。文件验证规则确保文件具有pngjpg扩展名。上传功能验证文件并将其保存在服务器上。
    第 2 步- 现在,将actionUploadImage函数添加到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]);
    }
    
    第 3 步 - 提交表单时,我们调用yii\web\UploadedFile::getInstance()函数将上传的文件表示为UploadedFile实例。然后,我们验证文件并将其保存在服务器上。
    第 4 步- 接下来,在views/site目录中创建一个upload.php视图文件。
    
    <?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() ?>
    
    请记住在上传文件时添加enctype选项。fileInput()方法呈现以下 html 代码 -
    
    <input type = "file">
    
    上面的 html 代码允许用户选择和上传文件。
    第 5 步- 现在,如果您访问http://localhost:8080/index.php?r=site/upload-image,您将看到以下内容。
    选择上传文件
    第 6 步- 选择要上传的图像,然后单击“提交”按钮。该文件将保存在“上传”文件夹内的服务器上。
    上传