📜  文件上传 yii2 rest api (1)

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

文件上传 Yii2 Rest API

在开发基于 Yii2 的 Restful API 时,文件上传是一个很常见的需求。本文将介绍如何在 Yii2 中实现文件上传功能。

准备工作

在开始之前,需要先安装 yii2-ckeditor-widget 扩展。可以使用 Composer 进行安装:

composer require 2amigos/yii2-ckeditor-widget:~1.0
实现步骤
1. 定义控制器

首先,需要定义一个控制器来处理文件上传功能。在控制器中,先定义一个 actionUpload 方法:

class FileController extends \yii\rest\Controller
{
    public function actionUpload()
    {
        // TODO
    }
}
2. 处理上传文件

actionUpload 方法中,先判断是否有上传的文件,如果没有,则返回错误信息;否则,通过 UploadedFile 类获取上传的文件信息,并将其保存到指定的文件夹中。

public function actionUpload()
{
    $file = UploadedFile::getInstanceByName('file_data');

    if (!$file) {
        throw new BadRequestHttpException('No file uploaded.');
    }

    $dir = Yii::getAlias('@app/web/uploads/');
    $filename = $file->baseName . '.' . $file->extension;
    $file->saveAs($dir . $filename);

    return [
        'url' => Yii::$app->request->hostInfo . '/uploads/' . $filename
    ];
}

在上面的代码中,我们通过 getInstanceByName('file_data') 方法获取上传的文件信息。其中 file_data 是上传文件的表单名称,需要根据实际情况进行修改。

然后,我们将上传的文件保存到 @app/web/uploads/ 目录下,并返回保存后的文件路径。这里我们返回的路径为相对路径,可以根据实际情况进行修改。

3. 配置路由

最后,我们需要在路由中配置该控制器的路由规则。可以在 config/web.php 中添加如下配置:

'components' => [
    'urlManager' => [
        'enablePrettyUrl' => true,
        'showScriptName' => false,
        'rules' => [
            ['class' => 'yii\rest\UrlRule', 'controller' => 'file'],
        ],
    ],
],
使用方法

上传文件的接口地址为:

POST /file/upload

请求参数中,需要包含上传的文件数据。可以使用 FormData 对象提交数据。

let formData = new FormData();
formData.append('file_data', file);

axios.post('/file/upload', formData, {
    headers: {
        'Content-Type': 'multipart/form-data'
    }
}).then(res => {
    console.log(res.data);
}).catch(err => {
    console.error(err);
});
总结

以上就是在 Yii2 中实现文件上传功能的步骤。通过上面的方法,我们可以快速地实现文件上传功能,提高开发效率。同时,需要注意文件上传的安全性,避免不必要的漏洞。