heryfitiavana / rcu-laravel
适用于 Laravel 的可断点续传分块上传
v1.0.0
2024-07-01 14:41 UTC
Requires
- illuminate/http: ^11.13
- illuminate/routing: ^11.13
- illuminate/support: ^11.13
Requires (Dev)
- orchestra/testbench: ^9.1
- phpunit/phpunit: ^11.2
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)。有关更多信息,请参阅 许可证文件。