JAY 2019-12-08 23:19:24 8303次浏览 2条评论 10 7 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
觉得很赞
您需要登录后才可以评论。登录 | 立即注册