📅  最后修改于: 2023-12-03 15:40:04.513000             🧑  作者: Mango
在开发基于 Yii2 的 Restful API 时,文件上传是一个很常见的需求。本文将介绍如何在 Yii2 中实现文件上传功能。
在开始之前,需要先安装 yii2-ckeditor-widget
扩展。可以使用 Composer 进行安装:
composer require 2amigos/yii2-ckeditor-widget:~1.0
首先,需要定义一个控制器来处理文件上传功能。在控制器中,先定义一个 actionUpload
方法:
class FileController extends \yii\rest\Controller
{
public function actionUpload()
{
// TODO
}
}
在 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/
目录下,并返回保存后的文件路径。这里我们返回的路径为相对路径,可以根据实际情况进行修改。
最后,我们需要在路由中配置该控制器的路由规则。可以在 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 中实现文件上传功能的步骤。通过上面的方法,我们可以快速地实现文件上传功能,提高开发效率。同时,需要注意文件上传的安全性,避免不必要的漏洞。