Yii - 文件上传
借助 yii\web\UploadedFile、models 和 yii\widgets\ActiveForm,您可以轻松实现文件上传功能。
在根文件夹中创建一个目录 'uploads'。此目录将保存所有上传的图像。要上传单个文件,您需要为上传的文件实例创建一个模型和该模型的一个属性。您还应该验证文件上传。
步骤 1 − 在 models 文件夹中,创建一个名为 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 属性用于保存文件实例。file 验证规则确保文件具有 png 或 jpg 扩展名。upload 函数验证文件并将其保存在服务器上。
步骤 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 − 选择要上传的图像并单击"提交"按钮。该文件将保存在服务器上的 'uploads' 文件夹中。