coding-socks / laravel-upload-handler
此包帮助将Laravel应用程序与分片上传库(例如DropzoneJS和Resumable.js)集成
Requires
- php: ^8.0
- illuminate/http: ^9.0 || ^10.0 || ^11.0
- illuminate/support: ^9.0 || ^10.0 || ^11.0
Requires (Dev)
- orchestra/testbench: ^7.3 || ^8.0 || ^9.0
- phpunit/phpunit: ^9.5 || ^10.5
README
Laravel上传处理程序包
此包帮助将Laravel应用程序与分片上传库(例如 DropzoneJS 和 blueimp的jQuery-File-Upload)集成。
以分片形式上传大文件可以降低风险。
- PHP从5.3.4开始限制并发上传数量,并且通过单次请求上传文件可以限制服务的可用性。(max_file_uploads)
- 出于安全原因,许多系统限制有效负载大小和可上传文件的大小。PHP也不例外。(upload_max_filesize)
- 检查文件的元信息并在上传前拒绝上传可能很有用,这样用户就不必等待数分钟或数秒钟来上传大文件,然后收到无效文件类型或MIME类型的错误消息。
- 可以包含断点续传功能,这意味着上传可以在重新连接后继续。
然而,目前还没有关于分片上传的RFC,这导致了众多实现。目前最成熟的项目是tus。
类似项目
- 支持多个库: 1up-lab/OneupUploaderBundle,pionl/laravel-chunk-upload
- 支持单个库: ankitpokhrel/tus-php,flowjs/flow-php-server,jildertmiedema/laravel-plupload,OneOffTech/laravel-tus-upload
目录
安装
您可以通过运行以下命令轻松使用Composer安装此包:
composer require coding-socks/laravel-upload-handler
要求
此包有以下要求:
- PHP
^7.3
- Laravel
^6.10 || ^7.0 || ^8.0
用法
- 注册路由
Route::any('/my-route', 'MyController@myFunction');
- 检索上传处理器。(分片上传处理器可以从容器中两种方式检索。)
- 使用依赖注入
use Illuminate\Http\Request; use CodingSocks\UploadHandler\UploadHandler; class MyController extends Controller { public function myFunction(Request $request, UploadHandler $handler) { return $handler->handle($request); } }
- 从应用容器解析
use Illuminate\Http\Request; use CodingSocks\UploadHandler\UploadHandler; class MyController extends Controller { public function myFunction(Request $request) { $handler = app()->make(UploadHandler::class); return $handler->handle($request); } }
处理器公开以下方法
"Handle" 很是含糊,但有其原因。此库试图提供比仅保存上传的分片更多功能。它还增加了断点续传功能,这取决于客户端库,可能会有很大差异。
事件
一旦文件上传完成,将触发一个 \CodingSocks\UploadHandler\Event\FileUploaded
事件。此事件包含磁盘和上传文件的路径。
您还可以将一个闭包
作为handle
方法的第二个参数添加,以添加一个行内监听器。监听器会使用磁盘和上传文件的路径调用。
$handler->handle($request, function ($disk, $path) { // Triggered when upload is finished });
更改驱动程序
您可以通过设置UPLOAD_DRIVER
环境变量或发布配置文件并直接更改它来更改默认驱动。
添加自己的驱动程序
类似于Laravel的核心组件,您可以为此包添加自己的驱动。您可以通过在服务提供程序中添加以下代码来实现。
app()->make(UploadManager::class)->extend('my_driver', function () { return new MyCustomUploadDriver(); });
如果您正在添加一个驱动,则需要扩展\CodingSocks\UploadHandler\Driver\BaseHandler
抽象类,您可以使用提供的驱动(例如\CodingSocks\UploadHandler\Driver\BlueimpUploadDriver
)作为如何实现的示例。
如果您编写了一个可能对他人有用的自定义驱动,请考虑通过拉取请求将其添加到包中。
驱动程序
以下是可用驱动及其各自规格的列表
单体驱动
此驱动是一个后备驱动,因为它可以处理正常文件请求。还添加了保存和删除功能。
Blueimp驱动
此驱动处理由Blueimp jQuery File Upload客户端库发出的请求。
DropzoneJS驱动
此驱动处理由DropzoneJS客户端库发出的请求。
Flow.js驱动
此驱动处理由Flow.js客户端库发出的请求。
由于问题 #44,您必须使用forceChunkSize
选项。
ng-file-upload驱动
此驱动处理由ng-file-upload客户端库发出的请求。
Plupload驱动
此驱动处理由Plupload客户端库发出的请求。
Resumable.js驱动
此驱动处理由Resumable.js客户端库发出的请求。
由于问题 #44,您必须使用forceChunkSize
选项。
simple-uploader.js驱动
此驱动处理由simple-uploader.js客户端库发出的请求。
由于问题 #44,您必须使用forceChunkSize
选项。
标识符
在某些情况下,当客户端库没有提供标识符时,需要上传文件的标识符。对于可恢复上传,此标识符非常重要,因为库必须能够检查特定客户端的给定文件的状态。没有标识符,可能会发生冲突。
会话标识符
此标识符使用客户端会话和原始文件名来创建上传文件的标识符。
认证标识符
此标识符使用认证用户的id和原始文件名来创建上传文件的标识符。
当用户未授权时,将抛出UnauthorizedException
。然而,仍然建议使用auth
中间件。
NOP标识符
此标识符使用原始文件名来创建上传文件的标识符。这不会抽象文件标识符,这在测试中可能很有用。
贡献
欢迎对此项目做出贡献,请参阅CONTRIBUTING.md文件以获取有关贡献指南的更多信息。
许可证
此产品受MIT许可协议的约束,请参阅许可文件以获取更多信息。