2019-07-01
Yii2 extension for large file chunk upload. Base on WebUploader.
github:https://github.com/oonne/yii2-webuploader
Installation
The preferred way to install this extension is through composer.
Either run
php composer.phar require --prefer-dist oonne/yii2-webuploader "*"
or add
"oonne/yii2-webuploader": "*"
to the require section of your composer.json file.
Usage
Add Upload widget in the view, for example:
<?php use oonne\webuploader\Upload; ?> <?= Upload::widget(['url'=>'/upload/upload']) ?>
Enter the service processing path in "url";
Add a upload controller, for example:
<?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, ]; } } }
The following is Chinese translation.(以下是中文翻译)
简介
基于Webuploader 的Yii2大文件上传扩展。Webuploader 是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件,支持图片上传和文件上传。本扩展仅实现大文件分片上传功能。超大文件在前端自动分成许多小文件,分别上传到服务端,再重新合成大文件,从而实现超大文件的上传。
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。