heryfitiavana/rcu-laravel

适用于 Laravel 的可断点续传分块上传

v1.0.0 2024-07-01 14:41 UTC

This package is auto-updated.

Last update: 2024-10-02 07:44:18 UTC


README

可断点续传分块上传 用于 Laravel。

安装

通过 composer

composer require heryfitiavana/rcu-laravel

用法

CSRF

将 CSRF 令牌添加到前端的 Uploader 中

// get csrf token from meta tag : <meta name="csrf-token" content="{{ csrf_token() }}">
const csrfToken = document.querySelector('meta[name="csrf-token"]').getAttribute("content");

new Uploader()
    .setHeaders({
        "X-CSRF-TOKEN": csrfToken,
    })
    /// ... others

定义路由

将以下路由添加到您的 routes/web.php 文件中

use Heryfitiavana\RCU\Controllers\UploadController;

Route::get('/uploadStatus', [UploadController::class, 'uploadStatus']);
Route::post('/upload', [UploadController::class, 'upload']);

默认 RCU 配置: RCUConfig

自定义 RCU 配置

自定义 RCU 配置

您可以通过定义一个自定义配置数组来自定义包的行为。以下是一个示例

$customConfig = [
    "store" => new JsonStoreProvider('rcu/uploads.json'),
    "tmpDir" => "rcu/tmp",
    "outputDir" => "rcu/output",
    "onCompleted" => function ($data) {
    },
];

使用配置

转到 app/Providers/AppServiceProvider.php 并添加以下代码

use Illuminate\Support\ServiceProvider;
use Heryfitiavana\RCU\Controllers\RCUControllerFactory;
use Heryfitiavana\RCU\Controllers\UploadController;
use Heryfitiavana\RCU\StoreProviders\JsonStoreProvider;

class AppServiceProvider extends ServiceProvider
{
    public function register()
    {
        // other ...
        $this->app->singleton(UploadController::class, function ($app) {
            $customConfig = [
                "store" => new JsonStoreProvider('rcu/uploads.json'),
                "tmpDir" => "rcu/tmp",
                "outputDir" => "rcu/output",
                "onCompleted" => function ($data) {
                },
            ];
            return RCUControllerFactory::createController($customConfig);
        });
    }

    public function boot()
    {
    }
}

API

RCUConfig

[
    "store" => new JsonStoreProvider('rcu/uploads.json'),
    "tmpDir" => "rcu/tmp",
    "outputDir" => "rcu/output",
    "onCompleted" => function ($data) {
    },
]

store

  • 类型: StoreProviderInterface
  • 默认: JsonStoreProvider

store 参数用于存储有关上传的信息,例如最后上传的分块编号、分块总数等。默认存储为 JSON,但您可以通过实现 StoreProviderInterface 来实现自己的存储。

tmpDir

  • 类型: string
  • 默认: rcu/tmp

保存所有二进制分块文件的目录。

outputDir

  • 类型: string
  • 默认: rcu/output

保存完整文件的目录。

onCompleted

  • 类型: (data: ['outputFile' => string, 'fileId' => string]) => void

此回调函数可用于在上传完成后执行任何额外的操作或操作,例如更新数据库记录或发送通知。

  • outputFile:上传文件的路径。
  • fileId:用于识别上传的文件 ID。这是从前端指定的 这里

StoreProviderInterface

Upload = [
    "id" => string,
    "chunkCount" => int,
    "lastUploadedChunkNumber": int,
    "chunkFilenames": string[],
];

interface StoreProviderInterface
{
    public function getItem(String $id) : Upload | undefined;
    public function createItem(String $id, Int $chunkCount): Upload;
    public function updateItem(String $id, Upload $update) : Upload;
    public function removeItem(String $id) : void;
}

许可证

MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件