dungang / yii2-fex-webuploader

1.0.5 2018-07-03 09:01 UTC

This package is not auto-updated.

Last update: 2024-09-28 20:14:48 UTC


README

  • 支持分片上传大文件
  • 可以开启和关闭分片上传功能
  • 默认只能上传一个文件,文件的服务端存储位置保存在隐藏字段
  • 要上传多个文件,可以通过 clientOptions 配置。开启之后,多个文件的服务端存储位置用逗号分隔成一个字符串保存在隐藏字段
  • 本模块的 UI 不具备通用性,只是解决了上传普通文件,上传大文件的问题
  • 主要解决自己项目的业务场景
  • 放弃之前的文件处理驱动,使用 dungang/yii2-file-storage 作为文件存储方案的替代

效果图

使用方法

下载验证码包


composer require dungang/yii2-fex-webuploader

配置模块 config/web.php

'webuploader'=>[
    'class'=>'dungang\webuploader\Module',
//下面是默认配置    
//    [
        /**
         * @var array 访问角色 默认是登录用户才可以
         */
//        role => ['@'],
         
        /**
         * @var string 上传文件的驱动
         */
//        'driver' => 'dungang\storage\driver\Local',
//        'driver' => [
                'class'=>'dungang\storage\driver\AliYunOSS',
                //Yii::$app->params['oss']
                'paramKey'=>'oss'
            ],
    
        /**
         * @var string 上传文件保存的相对路径
         */
//        'saveDir' => '/upload/webuploader',
    
        /**
         * @var array 接受的文件类型
         */
//        'accept' => ['gif','jpg','png','bmp','docx','doc','ppt','xsl','rar','zip','7z']
//    ]
],
    

配置小部件

<?= $form->field($model, 'image')->widget('\dungang\webuploader\widgets\WebUploader',[
    'chunked'=>true
]) ?>

<?= \dungang\webuploader\widgets\WebUploader::widget([
    'chunked'=>true,
    'name' =>'image'
])?>

<?= $form->field($model,'cover')->widget('dungang\webuploader\widgets\WebUploader',[
    'chunked'=>true,
    'chunkSize'=>4*1024*1024 //七牛存储必须设置为4m
])?> 

<?= $form->field($model, 'cover')->widget('dungang\webuploader\widgets\WebUploader',[
    'chunked'=>true,
    'chunkSize'=>4*1024*1024,
    'formData'=>[
        'entityId'=>$model->id,
        'entityName'=>'post'
    ]
]) ?>

修改 php.ini

## 七牛存储必须设置为4m 所以 至少是4m
upload_max_filesize = 4M  
post_max_size = 8M

配置参数如下

  • 根据实际情况选择性配置,默认上传入口是本模块的控制器,也可以将相同的 action 配置在自己 app 的其他控制器中
  • 按照上述安装步骤操作,就可以正常工作了
    /**
     * @var string 选择按钮的名称
     */
    'pickTitle' => '选择文件',
    
    /**
     * @var string 文件上传入口
     */
    'uploadPoint'=> null,

    /**
     * @var string 删除文件入口
     */
    'delPoint'=>null,

    /**
     * @var bool 是否自动开启上传
     */
    'auto' => true,

    /**
     * @var bool 分片上传大文件
     */
    'chunked' => false,

    /**
     * @var int 上传文件数量限制
     */
    'fileNumLimit' => 1,

    /**
     * @var int 单个文件大小限制
     */
    'fileSingleSizeLimit' => 100 * 1024 * 1024,

    /**
     * @var int 分片的大小
     */
    'chunkSize' => 5 * 1024 * 1024,

    /**
     * @var array 额外的表单数据
     */
    'formData' => [],
    
    /**
     * @var array 初始化 webuploader options
     */
    'clientOptions' => []

扩展驱动

放弃之前的文件处理驱动,使用 dungang/yii2-file-storage 作为文件存储方案的替代

支持事件

Uploader 驱动事件

  • beforeInitUploaderinitUploader 方法调用之前触发
  • beforeWriteFilewriteFile 方法调用之前触发
  • afterWriteFilewriteFile 方法调用之后触发
  • beforeDeleteFiledeleteFile 方法调用之前触发
  • afterDeleteFiledeleteFile 方法调用之后触发

使用场景

  • 在使用非本地驱动时,如果是成熟项目,以阿里云 OSS 为例,原先项目的配置属性 key 可能和驱动本身要求的 key 名称不一样。这个时候需要在初始化之前获取到原先的配置进行转换成驱动要求的,则可以绑定 beforeInitUploader 事件来处理此工作。
  • 比如我们需要上传文件之后,把文件的存储信息保存到数据库,则可以绑定 afterWriteFile 事件来处理此工作。
  • 比如我们删除文件,要删除对应的数据库信息,则可以绑定 afterDeleteFile 事件来处理此工作。

绑定事件的方式,配置行为

'webuploader'=>[
    'class'=>'dungang\webuploader\Module',
    [
        'driver' => [
                'class'=>'dungang\webuploader\components\AliYunOSSUploader',
                //Yii::$app->params['oss']
                'paramKey'=>'oss',
                //参考Yii2行为配置
                'as aliyunBehavior'=>'behiaviorClassName'
            ],
    ]
],

YII2行为配置的方法

[
    'as myBehavior2' => MyBehavior::className(),

    'as myBehavior3' => [
        'class' => MyBehavior::className(),
        'prop1' => 'value1',
        'prop2' => 'value2',
    ],
]

协议

MIT 许可证

版权所有 (c) 2017 dungang

在此特此授予,任何人免费获取本软件及其相关文档文件(以下简称“软件”)的副本,并在不受限制的情况下处理软件,包括但不限于使用、复制、修改、合并、发布、分发、转授和/或销售软件副本,并允许向提供软件的人提供本软件的副本,前提是以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

本软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、适用于特定目的和无侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,无论此类责任是基于合同、侵权或其他方式,源于、源自或与软件或软件的使用或其他交易有关。