mirror of
https://github.com/kuaifan/dootask.git
synced 2026-08-09 14:28:33 +00:00
- 新增 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
41 lines
1.3 KiB
PHP
41 lines
1.3 KiB
PHP
<?php
|
|
/**
|
|
* 验证 DeleteTmpTask::tmp_chunks 清理逻辑。
|
|
* docker exec dootask-php-3bed84 php /var/www/tests/manual/chunk_cleanup_smoke.php
|
|
*/
|
|
require '/var/www/vendor/autoload.php';
|
|
$app = require_once '/var/www/bootstrap/app.php';
|
|
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
|
|
$kernel->bootstrap();
|
|
|
|
use App\Tasks\DeleteTmpTask;
|
|
|
|
function out(string $m): void { echo "[" . date('H:i:s') . "] $m\n"; }
|
|
function fail(string $m): void { out("FAIL: $m"); exit(1); }
|
|
|
|
$root = public_path('uploads/tmp/chunks');
|
|
@mkdir("$root/9999/old_session", 0775, true);
|
|
@mkdir("$root/9999/new_session", 0775, true);
|
|
file_put_contents("$root/9999/old_session/0", 'old');
|
|
file_put_contents("$root/9999/new_session/0", 'new');
|
|
|
|
// 把 old_session 的 mtime 改成 25 小时前
|
|
$past = time() - 3600 * 25;
|
|
touch("$root/9999/old_session", $past);
|
|
touch("$root/9999/old_session/0", $past);
|
|
|
|
$task = new DeleteTmpTask('tmp_chunks', 24);
|
|
$task->start();
|
|
|
|
if (is_dir("$root/9999/old_session")) {
|
|
fail('old_session 应被清理但仍在');
|
|
}
|
|
if (!is_dir("$root/9999/new_session")) {
|
|
fail('new_session 不应被清理却被删');
|
|
}
|
|
out('OK: old_session 清掉 / new_session 保留');
|
|
|
|
// 清理测试残留
|
|
exec("rm -rf " . escapeshellarg("$root/9999"));
|
|
out('=== 通过 ===');
|