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-09-19 11:41:14 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

带 Caret 版本范围 (^)

用法

  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 事件。此事件包含磁盘和上传文件的路径。

您还可以将一个闭包作为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许可协议的约束,请参阅许可文件以获取更多信息。