Yii2 大文件分片上传扩展 [ 2.0 版本 ]
简介
基于 Webuploader 的 Yii2 大文件上传扩展。Webuploader 是由 Baidu WebFE(FEX) 团队开发的一个简单的以 HTML5 为主,FLASH 为辅的现代文件上传组件,支持图片上传和文件上传。本扩展仅实现大文件分片上传功能。超大文件在前端自动分成许多小文件,分别上传到服务端,再重新合成大文件,从而实现超大文件的上传。
博客原文:https://blog.oonne.com/site/blog?id=53
github:https://github.com/oonne/yii2-webuploader
安装
通过composer安装。
执行以下命令:
php composer.phar require --prefer-dist oonne/yii2-webuploader "*"
或者把以下内容添加到composer.json中:
"oonne/yii2-webuploader": "*"
使用
在需要用到上传组件的view中添加以下代码:
<?php use oonne\webuploader\Upload; ?>
<?= Upload::widget(['url'=>'/upload/upload']) ?>
其中,"url"参数中填写上传组件对应的服务端地址。(即你准备用来接收上传文件的controller对应的地址)。
然后编写controller代码如下:
<?php
namespace backend\controllers;
use Yii;
use yii\web\Response;
use yii\web\UploadedFile;
use oonne\webuploader\UploadServer;
class UploadController extends \yii\rest\Controller
{
public function behaviors()
{
$behaviors = parent::behaviors();
$behaviors['contentNegotiator']['formats'] = [
'application/json' => Response::FORMAT_JSON
];
return $behaviors;
}
protected function verbs()
{
return [
'upload' => ['post'],
];
}
public function actionUpload()
{
$fileData = Yii::$app->request->post();
$file = UploadedFile::getInstanceByName('file');
$fileRet = UploadServer::uploadFile($file, $fileData, Yii::$app->params['temppath'], Yii::$app->params['filepath']);
if ($fileRet['ret'] == 0) {
return [
'Ret' => 0,
'Filename' => $fileRet['file_name'],
'Url' => '$downloadUrl',
'Callback' => 'location.reload(true)',
];
} else {
return [
'Ret' => 1000,
];
}
}
}
UploadServer::uploadFile
的入参说明:
- $file 上传的文件,使用
Yii::$app->request->post()
获取post请求的body内容。 - $fileData 文件参数数据,使用
UploadedFile::getInstanceByName('file')
获取。 - $tempPath 分块文件临时存储路径,必须要有读写运行权限(可以直接设为777)。
- $filePath 文件最终存储路径,必须要有读写运行权限(可以直接设为777)。
出参说明:
- $ret 结果:0成功,其他失败。
- $ret_msg 结果:成功返回OK,失败返回原因。
- $file_name 文件名
- $file_size 文件大小
- $mime 文件类型
补充说明:
- 上传文件需要使用post请求(在verbs里定义)。
- 支持同个页面使用复数Widget。
- 支持中英文,随项目配置自动切换。
- mime里储存了文件类型,如果想在web端实现下载文件,需要设置Mime-type。
JAY
注册时间:2017-02-21
最后登录:2022-09-27
在线时长:32小时19分
最后登录:2022-09-27
在线时长:32小时19分
- 粉丝10
- 金钱6225
- 威望50
- 积分7045
共 2 条评论
你这个治标不治本啊,最后再合并文件,跟直接上传文件不是一个道理吗,文件大了还是一样要超时
大文件上传的插件可以看下
前端Javascript+Html5+后端PHP分块上传文件,PHP分块上传大文件
composer require lys/php-shard-upload
https://blog.csdn.net/qq_24133859/article/details/118354962