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 扩展名。上传函数验证文件并将其保存在服务器上。
步骤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;
}
}
returnthis->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 选项。
The fileInput() 方法呈现如下的 HTML 代码 –
<input type = "file">
上面的HTML代码允许用户选择和上传文件。
步骤5 - 现在,如果你访问 http://localhost:8080/index.php?r=site/upload-image ,你会看到以下内容。
步骤6 - 选择要上传的图片并点击“提交”按钮。文件将保存在服务器上的 ‘uploads’ 文件夹内。