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,
];
}
}
}
中文文档
简介
基于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。