AetherUpload:大文件秒传插件,移植自Laravel扩展包

v1.0.2 版本
2022-08-24 版本更新时间
111 安装
9 star

简介

本项目移植自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天前的无效临时文件

效果图(可选)