📜  Yii-文件上传(1)

📅  最后修改于: 2023-12-03 15:35:48.882000             🧑  作者: Mango

Yii 文件上传

在构建一个 Web 应用程序时,经常需要用户上传文件。 Yii 提供了一个简单使用的文件上传组件,它允许您轻松地从 Web 页面向服务器上载一个或多个文件。本文将向您介绍 Yii 中的文件上传组件,及其如何使用它。

安装和配置

Yii 文件上传组件已经包含在 Yii 的核心中,无需额外安装。但是,在使用上传的之前,我们需要进行一些必要的配置:

在 Yii 的配置文件中,我们需要配置两个组件:requestmyUploader

'components' => [
    'request' => [
        'parsers' => [
            'multipart/form-data' => 'yii\web\MultipartFormDataParser',
        ],
    ],
    'myUploader' => [
        'class' => 'yii\web\UploadedFile',
        // 配置项
    ],
    // ...
],

request 组件是用于解析上传请求的,其中配置了 parsers,使其能够解析 multipart/form-data 类型的请求。这使得上传文件时,可以直接在控制器的 action 方法中通过 Yii::$app->request->getBodyParmas() 方法,获取到上传的文件信息。

myUploader 组件是 Yii 内置的 UploadedFile 组件。当客户端提交文件时,该组件会创建一个 UploadedFile 的实例,我们可以使用 UploadedFile 实例对上传的文件进行操作,并且 UploadedFile 也是一个 Yii 的核心组件,我们无需单独安装。

文件上传

Yii 中的文件上传非常简单。我们只需要在表单中设置 enctype = "multipart/form-data",控制器中就可以直接访问上传的文件。以下是一个表单示例:

<form action="index.php?r=site/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="myFile">
    <input type="submit" value="Upload">
</form>

表单中一个上传的文件控件,将上传文件存储在名为 myFile 的变量中。当表单被提交时,我们可以通过以下方式在控制器中获取上传的文件:

$file = \Yii::$app->request->getBodyParmas('myFile');

$file 将会是一个 UploadedFile 对象,您可以通过这个对象对上传的文件进行操作。

文件验证

在上传文件之前,通常需要对上传的文件进行验证,检查文件类型和大小等。Yii 文件上传组件提供了一个内置的验证器,在上传文件时使用它非常容易。

以下是一个将文件大小限制为 10MB 并且仅允许上传图像文件的示例:

public function actionUpload()
{
    $model = new UploadForm();

    if (\Yii::$app->request->isPost) {
        // 上传文件
        $model->file = \yii\web\UploadedFile::getInstance($model, 'file');
        if ($model->file && $model->validate()) {
            $model->file->saveAs('uploads/' . $model->file->baseName . '.' . $model->file->extension);
        }
    }

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

在上面的代码中,我们首先实例化 UploadForm 模型。然后,使用 getInstance 方法从表单中获取上传的文件。接下来,我们使用 validate() 方法对上传的文件进行验证。如果文件大小恰好为 10MB ,且类型是图像类型,则返回 true,否则返回 false。

如果验证通过,我们将使用 saveAs() 方法将文件另存为 uploads/文件名.扩展名

结论

Yii 的文件上传组件使上传文件变得非常便捷,简单。使用上传组件可简化您的代码并自动完成一些繁琐的验证工作。本文中所介绍所有内容,已经足够您开始使用 Yii 的文件上传组件,并为您的 Web 应用程序增加文件上传的功能。