git-hub地址
https://github.com/peinhu/AetherUpload-Laravel
用法
安装
0 在终端内切换到你的laravel项目根目录,执行composer require peinhu/aetherupload-laravel ~2.0
1 (Laravel 5.5+请跳过)在config/app.php的providers数组中添加一行AetherUpload\AetherUploadServiceProvider::class,
2 执行php artisan aetherupload:publish来发布一些文件和目录
3 在浏览器访问http://域名/aetherupload可到达示例页面
提示:更改相关配置选项请编辑config/aetherupload.php。
基本用法
文件上传:参考示例文件注释的部分,在需要上传大文件的页面引入相应文件和代码。可使用自定义中间件来对文件上传进行额外过滤,还可使用上传完成事件对上传的文件进一步处理。
分组配置:在配置文件的groups下新增分组,运行php artisan aetherupload:groups自动创建对应目录。
自定义中间件:参考laravel文档中间件部分,创建你的中间件并在Kernel.php中注册,将你注册的中间件名称填入配置文件对应部分,如['middleware1','middleware2']。
上传完成事件:分为上传完成前和上传完成后事件,参考laravel文档事件系统部分,在EventServiceProvider中注册你的事件和监听器,运行php artisan event:generate生成事件和监听器,将你注册的事件完整类名填入配置文件对应部分,如'App\Events\OrderShipped'。
添加秒传功能(需Redis及浏览器支持)
安装Redis并启动服务端。安装predis包composer require predis/predis。确保上传页面引入了spark-md5.min.js文件。
提示:在Redis中维护了一份与实际资源文件对应的秒传清单,实际资源文件的增删造成的变化均需要同步到秒传清单中,否则会产生脏数据,扩展包已包含新增部分,当删除资源文件时,使用者需手动调用对应方法删除秒传清单中的记录。
\AetherUpload\Util::deleteResource($savedPath);//删除对应的资源文件\AetherUpload\Util::deleteRedisSavedPath($savedPath);//删除对应的redis秒传记录
分布式部署(需Redis及域名跨域支持)
分布式部署通过将应用服务器与储存服务器分离,可减少应用服务器负载,增加应用并发连接数,降低耦合,减少单点故障风险,提高访问效率,启用分布式部署后应用服务器将不处理任何上传和访问请求。
安装Redis并启动服务端。安装predis包composer require predis/predis。确保上传页面表单中包含{{ storage_host_field() }}。
应用服务器配置:
在config/aetherupload.php中配置distributed_deployment项,将enable设置为true,role设置为web,storage_host设置为储存服务器的域名http://storage.your-domain.com。
在.env中将APP_NAME和APP_KEY配置项改为对应特定值,与储存服务器配置一致。新增配置SESSION_DOMAIN=.your-domain.com,用以共享cookie。修改配置SESSION_DRIVER=redis,用以共享session。
储存服务器配置:
在config/aetherupload.php中配置distributed_deployment项,将enable设置为true,role设置为storage,middleware_cors设置为跨域中间件AetherUploadCORS类在Kernel.php中注册的名称,allow_origin设置为应用服务器的域名http://www.your-domain.com。
在.env中将APP_NAME和APP_KEY配置项改为对应特定值,与应用服务器配置一致。新增配置SESSION_DOMAIN=.your-domain.com,用以共享cookie。修改配置SESSION_DRIVER=redis,用以共享session。
使用方便的artisan命令
php artisan aetherupload:groups 列出所有分组并自动创建对应目录
php artisan aetherupload:build 在Redis中重建资源文件的秒传清单
php artisan aetherupload:clean 2 清除2天前的无效临时文件
php artisan aetherupload:publish vendor:publish的简化命令,覆盖发布一些目录和文件