在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:aetherupload-laravel开源软件地址:https://gitee.com/peinhu/aetherupload-laravel开源软件介绍:AetherUpload-Laravel提供超大文件上传的Laravel扩展包,支持分组配置、断线续传、秒传、分布式部署等功能,简单易用,满足多数人的主流需求。无感知化的设计理念,可实现由扩展自动接管上传和访问请求,开发者专注于业务,无需关心上传流程,无需编写适配代码,几乎开箱即用,节省大量开发时间。基于Laravel 5开发,支持5.1+版本。永久免费不接受赞助!欢迎提出问题和建议! 我们知道,在以前,文件上传采用的是直接传整个文件的方式,这种方式对付一些小文件是没有问题的。而当需要上传大文件时,此种方式不仅操作繁琐,需要修改web服务器和后端语言的配置,而且会大量占用服务器的内存,导致服务器内存吃紧,严重的甚至传输超时或文件过大无法上传。很显然,普通的文件上传方式已无法满足现在越来越高的要求。 随着技术的发展,如今我们可以利用HTML5的分块上传技术来轻松解决这个困扰,通过将大文件分割成小块逐个上传再拼合,来降低服务器内存的占用,突破服务器及后端语言配置中的上传大小限制,可上传任意大小的文件,同时也简化了操作,提供了直观的进度显示。 功能特性
①:同步上传相比异步上传,在上传带宽足够大的情况下速度稍慢,但同步可在上传同时进行文件的拼合,而异步因文件块上传完成的先后顺序不确定,需要在所有文件块都完成时才能拼合,将会导致异步上传在接近完成时需等待较长时间。同步上传每次只有一个文件块在上传,在单位时间内占用服务器的内存较少,相比异步方式可支持更多人同时上传。 ②:断线续传和断点续传不同,断线续传是指遇到断网或无线网络不稳定时,在不关闭页面的情况下,上传组件会定时自动重试,一旦网络恢复,文件会从未上传成功的那个文件块开始继续上传。断线续传在刷新页面或关闭后重开是无法续传的,之前上传的部分已成为无效文件。 ③:文件秒传需服务端Redis和客户端浏览器支持(FileReader、File.slice()),两者缺一则秒传功能无法生效。默认关闭,需在配置文件中开启。 ④:分布式部署需要在应用服务器与储存服务器进行跨域配置,通过填写相关配置项可实现自动跨域,并共享cookie和session。 用法安装 0 在终端内切换到你的laravel项目根目录,执行 1 (Laravel 5.5+请跳过)在 2 执行 3 在浏览器访问 提示:更改相关配置选项请编辑 基本用法 文件上传:参考示例文件注释的部分,在需要上传大文件的页面引入相应文件和代码。可使用自定义中间件来对文件上传进行额外过滤,还可使用上传完成事件对上传的文件进一步处理。 分组配置:在配置文件的groups下新增分组,运行 自定义中间件:参考laravel文档中间件部分,创建你的中间件并在 上传完成事件:分为上传完成前和上传完成后事件,参考laravel文档事件系统部分,在 添加秒传功能(需Redis及浏览器支持) 安装Redis并启动服务端。安装predis包 提示:在Redis中维护了一份与实际资源文件对应的秒传清单,实际资源文件的增删造成的变化均需要同步到秒传清单中,否则会产生脏数据,扩展包已包含新增部分,当删除资源文件时,使用者需手动调用对应方法删除秒传清单中的记录。 \AetherUpload\Util::deleteResource($savedPath); //删除对应的资源文件\AetherUpload\Util::deleteRedisSavedPath($savedPath); //删除对应的redis秒传记录 分布式部署(需Redis及域名跨域支持) 分布式部署通过将应用服务器与储存服务器分离,可减少应用服务器负载,增加应用并发连接数,降低耦合,减少单点故障风险,提高访问效率,启用分布式部署后应用服务器将不处理任何上传和访问请求。 安装Redis并启动服务端。安装predis包 应用服务器配置: 储存服务器配置: 使用方便的artisan命令
优化建议
* * * * * php /项目根目录的绝对路径/artisan schedule:run 1>> /dev/null 2>&1 在 $schedule->command('aetherupload:clean 2')->daily();
'disks' => [ ... 'redis' => [ 'driver' => 'redis', 'disable_asserts'=>true, ], ... ]
* * * * * php /项目根目录的绝对路径/artisan schedule:run 1>> /dev/null 2>&1 在 $schedule->command('aetherupload:build')->daily();
兼容性
安全性AetherUpload在上传前使用白名单+黑名单的形式进行文件后缀名过滤,上传后再检查文件的Mime-Type类型。白名单直接限制了保存文件扩展名,黑名单默认屏蔽了常见的可执行文件扩展名,来阻止上传恶意文件,安全起见白名单一栏不应留空。 虽然做了诸多安全工作,但恶意文件上传是防不胜防的,建议正确设置上传目录权限,确保相关程序对资源文件没有执行权限。 更新日志2019-06-03 v2.0.6 衍生项目laravel-admin表单扩展:large-file-upload 许可证使用GPLv2许可证及Anti 996许可证, 查看LICENCE文件及LICENSE_996文件以获得更多信息。 |
请发表评论