coding-socks/laravel-chunk-uploader

此包已被废弃,不再维护。作者建议使用coding-socks/laravel-upload-handler包。

此包帮助将Laravel应用程序与分块上传库(例如DropzoneJS和Resumable.js)集成。

v0.2.5 2024-05-19 10:53 UTC

This package is auto-updated.

Last update: 2024-05-19 10:55:06 UTC


README

Laravel上传处理程序包

Github Actions Badge Downloads Badge Version Badge Coverage Badge License Badge

此包帮助将Laravel应用程序与以下分块上传库集成:例如DropzoneJSblueimp的jQuery-File-Upload

以分块形式上传大文件可以降低风险。

  • PHP 5.3.4限制并发上传的数量,并且通过单个请求上传文件可以限制服务的可用性。(max_file_uploads
  • 出于安全原因,许多系统限制有效负载大小和可上传文件的大小。PHP也不例外。(upload_max_filesize
  • 检查文件的元信息并在上传之前拒绝上传可能很有用,这样用户就不必等待数分钟或数秒来上传大文件,然后收到关于无效文件类型或MIME类型的错误消息。
  • 可以包括恢复功能,这意味着在重新连接后可以继续上传。

然而,目前还没有关于分块上传的RFC,这导致了多种实现。目前最成熟的项目是tus

类似项目

目录

安装

您可以使用以下命令使用Composer轻松安装此包:

composer require coding-socks/laravel-upload-handler

要求

此包有以下要求

  • PHP ^7.3
  • Laravel ^6.10 || ^7.0 || ^8.0

冒号版本范围 (^)

用法

  1. 注册路由
Route::any('/my-route', 'MyController@myFunction');
  1. 检索上传处理程序。(分块上传处理程序可以通过两种方式从容器中检索。)
  • 使用依赖注入
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许可证许可,请参阅 许可证文件 以获取更多信息。