AetherUpload:大文件秒传插件,移植自Laravel扩展包
简介
本项目移植自AetherUpload-Laravel
提供超大文件上传,支持断线续传、秒传、自定义中间件、自定义路由、分组配置等功能,简单易用,满足多数人的主流需求。无感知化的设计理念,可实现由扩展自动接管上传和访问请求,开发者专注于业务,无需关心上传流程,无需编写适配代码,几乎开箱即用,节省大量开发时间。现已基于Laravel扩展包移植为Webman插件。
功能特性
- 百分比进度条
- 文件类型限制
- 文件大小限制
- 多语言支持
- 资源分组配置
- 上传完成事件
- 同步上传 ①
- 断线续传 ②
- 文件秒传 ③
- 自定义中间件 ④
- 自定义路由
- 宽松模式
①:同步上传相比异步上传,在上传带宽足够大的情况下速度稍慢,但同步可在上传同时进行文件的拼合,而异步因文件块上传完成的先后顺序不确定,需要在所有文件块都完成时才能拼合,将会导致异步上传在接近完成时需等待较长时间。同步上传每次只有一个文件块在上传,在单位时间内占用服务器的内存较少,相比异步方式可支持更多人同时上传。
②:断线续传和断点续传不同,断线续传是指遇到断网或无线网络不稳定时,在不关闭页面的情况下,上传组件会定时自动重试,一旦网络恢复,文件会从未上传成功的那个文件块开始继续上传。断线续传在刷新页面或关闭后重开是无法续传的,之前上传的部分已成为无效文件。
③:文件秒传需服务端Redis和客户端浏览器支持(FileReader、File.slice()),两者缺一则秒传功能无法生效。默认关闭,需在配置文件中开启。
④:结合自定义中间件,可对已上传资源的访问、下载行为进行权限控制。
安装
0 在终端内切换到你的webman项目根目录,执行composer require peinhu/aetherupload-webman ^1.0
1 在浏览器访问http://域名/aetherupload
可到达示例页面
提示:更改相关配置选项请编辑config/plugin/peinhu/aetherupload-webman/app.php
。
使用
文件上传
参考示例文件及注释部分,在需要上传大文件的页面引入相应文件和代码。
可使用自定义中间件来对文件上传进行额外过滤,还可使用上传完成事件对上传的文件进一步处理。
分组配置
在配置文件的groups下新增分组,运行php webman aetherupload:groups
自动创建对应目录。
自定义中间件
参考Webman文档路由中间件部分,创建你的中间件并将你编写的中间件名称填入配置文件对应部分,如[app\middleware\MiddlewareA::class,app\middleware\MiddlewareB::class]
。
上传完成事件
分为上传完成前和上传完成后事件,参考Webman文档常用组件Event事件部分,为'aetherupload.before_upload_complete'
及'aetherupload.upload_complete'
配置对应的事件处理类,在本插件配置文件app.php中将groups
下相应选项设置为true
。
添加秒传功能(需Redis及浏览器支持)
参考Webman文档Redis部分,安装所需依赖。安装Redis并启动服务。安装predis包composer require predis/predis
,在config/redis.php
中设置client为'predis'
。
提示:在Redis中维护了一份与实际资源文件对应的秒传清单,实际资源文件的增删造成的变化均需要同步到秒传清单中,否则会产生脏数据,扩展包已包含新增部分,当删除资源文件时,使用者需手动调用对应方法删除秒传清单中的记录。
\AetherUpload\Util::deleteResource($savedPath); //删除对应的资源文件
\AetherUpload\Util::deleteRedisSavedPath($savedPath); //删除对应的Redis秒传记录
使用方便的控制台命令
php webman aetherupload:groups
列出所有分组并自动创建对应目录
php webman aetherupload:build
在Redis中重建资源文件的秒传清单
php webman aetherupload:clean 2
清除2天前的无效临时文件