coding-socks / laravel-chunk-uploader
此包帮助将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
事件。此事件包含上传文件的磁盘和路径。
您还可以将 Closure
作为 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
)作为示例。
如果您编写了一个可能对他人有用的自定义驱动程序,请考虑通过拉取请求将其添加到包中。
驱动程序
以下是可用驱动程序及其各自规格的列表
服务 | 驱动程序名称 | 分块上传 | 可恢复 |
---|---|---|---|
单体 | monolith |
否 | 否 |
Blueimp | blueimp |
是 | 是 |
DropzoneJS | dropzone |
是 | 否 |
Flow.js | flow-js |
是 | 是 |
ng-file-upload | ng-file-upload |
是 | 否 |
Plupload | plupload |
是 | 否 |
Resumable.js | resumable-js |
是 | 是 |
simple-uploader.js | simple-uploader-js |
是 | 是 |
Monolith 驱动程序
该驱动程序是一个后备驱动程序,因为它可以处理常规文件请求。还添加了保存和删除功能。
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
选项。
标识符
在某些情况下,当客户端库不提供标识符时,需要上传文件的标识符。对于可恢复上传,此标识符很重要,因为库必须能够检查特定客户端的给定文件的状态。如果没有标识符,可能会发生冲突。
服务 | 驱动程序名称 |
---|---|
会话标识符 | 会话 |
认证标识符 | 身份验证 |
NOP标识符 | nop |
会话标识符
此标识符使用客户端会话和原始文件名来创建上传文件的标识符。
认证标识符
此标识符使用已验证用户的ID和原始文件名来创建上传文件的标识符。
当用户未授权时,它将抛出 UnauthorizedException
。然而,仍然建议使用 auth
中间件。
NOP标识符
此标识符使用原始文件名来创建上传文件的标识符。这不会抽象文件标识符,这对于测试可能很有用。
贡献
欢迎为该项目做出贡献,请参阅 CONTRIBUTING.md 文件以获取有关贡献指南的更多信息。
许可证
本产品受MIT许可证许可,请参阅 许可证文件 以获取更多信息。