dootask/routes/web.php
kuaifan 184fb27680 feat(upload): 分片上传统一链路,5 场景突破单文件 1G 限制
- 新增 api/upload/{init,chunk,merge} 入口与 ChunkUpload 模块(5MB 分片、3 并发、Redis 状态机)
- 5 场景接入:文件柜 / 聊天 / 任务附件 / 头像&系统图片 / 编辑器粘贴
- 秒传:同用户同 hash 复用 FileContent 物理文件,零传输
- 续传:Redis + localStorage 双索引,24h TTL
- 与老接口对齐:pid 锁、≤300 上限、webkit_relative_path 目录递归、overwrite 替换语义
- init 阶段读 file_upload_limit 拦截超限,避免传完分片才报错
- DeleteTmpTask 加 tmp_chunks case 兜底清理 24h 未合并目录
- files 表新增 hash 列(migration)
- 前端 chunkedUpload wrapper:主线程 spark-md5 流式 + 指数退避重试
- ai-kb 同步:upload / file-upload-limit / upload-size-limit 三个 chunk
2026-06-30 04:30:09 +00:00

91 lines
4.3 KiB
PHP

<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\IndexController;
use App\Http\Controllers\Api\TestController;
use App\Http\Controllers\Api\FileController;
use App\Http\Controllers\Api\UsersController;
use App\Http\Controllers\Api\DialogController;
use App\Http\Controllers\Api\PublicController;
use App\Http\Controllers\Api\ReportController;
use App\Http\Controllers\Api\SystemController;
use App\Http\Controllers\Api\LicenseController;
use App\Http\Controllers\Api\AssistantController;
use App\Http\Controllers\Api\ProjectController;
use App\Http\Controllers\Api\ComplaintController;
use App\Http\Controllers\Api\SearchController;
use App\Http\Controllers\Api\AppsController;
use App\Http\Controllers\Api\UploadController;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
/**
* 接口
*/
Route::prefix('api')->middleware(['webapi'])->group(function () {
// 会员
Route::any('users/{method}', UsersController::class);
Route::any('users/{method}/{action}', UsersController::class);
// 项目
Route::any('project/{method}', ProjectController::class);
Route::any('project/{method}/{action}', ProjectController::class);
// 系统
Route::any('system/{method}', SystemController::class);
Route::any('system/{method}/{action}', SystemController::class);
// 在线授权
Route::any('license/{method}', LicenseController::class);
Route::any('license/{method}/{action}', LicenseController::class);
// 对话
Route::any('dialog/{method}', DialogController::class);
Route::any('dialog/{method}/{action}', DialogController::class);
// 文件
Route::any('file/{method}', FileController::class);
Route::any('file/{method}/{action}', FileController::class);
// 分片上传
Route::any('upload/{method}', UploadController::class);
Route::any('upload/{method}/{action}', UploadController::class);
// 报告
Route::any('report/{method}', ReportController::class);
Route::any('report/{method}/{action}', ReportController::class);
// 公开接口
Route::any('public/{method}', PublicController::class);
Route::any('public/{method}/{action}', PublicController::class);
// 助手
Route::any('assistant/{method}', AssistantController::class);
Route::any('assistant/{method}/{action}', AssistantController::class);
// 投诉
Route::any('complaint/{method}', ComplaintController::class);
Route::any('complaint/{method}/{action}', ComplaintController::class);
// 智能搜索
Route::any('search/{method}', SearchController::class);
Route::any('search/{method}/{action}', SearchController::class);
// 应用相关
Route::any('apps/{method}', AppsController::class);
Route::any('apps/{method}/{action}', AppsController::class);
// 测试
Route::any('test/{method}', TestController::class);
Route::any('test/{method}/{action}', TestController::class);
});
/**
* 页面
*/
Route::middleware(['webapi'])->group(function () {
Route::any('/', IndexController::class);
Route::any('/{method}', IndexController::class);
Route::any('/{method}/{action}', IndexController::class);
Route::any('/{method}/{action}/{child}', IndexController::class);
Route::any('/{method}/{action}/{child}/{n}', IndexController::class)->where('method', '^(?!(uploads|images)).*');
Route::any('/{method}/{action}/{child}/{n}/{c}', IndexController::class)->where('method', '^(?!(uploads|images)).*');
});