Laravel-AetherUpload 大文件上传:分片上传

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的简化命令,覆盖发布一些目录和文件

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容