mirror of
https://github.com/kuaifan/dootask.git
synced 2026-08-01 19:05:55 +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
2.8 KiB
2.8 KiB
id, title, type, feature, scope, locale, aliases, related_tools, related_pages, prerequisites, negative, last_verified
| id | title | type | feature | scope | locale | aliases | related_tools | related_pages | prerequisites | negative | last_verified | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| file.upload.howto | 上传文件 | howto | file | end-user | zh |
|
|
|
|
|
v1.8.45 |
上传文件
入口
- 桌面端 Web:进入「文件」页 → 任意文件夹内 → 顶部「+」→「上传文件」 / 「上传文件夹」
- 桌面端 Web:直接把文件拖入页面任意位置
- 桌面端 Electron:拖入应用窗口
- 移动端:「文件」页右上角「+」→「上传文件」(受系统相册 / 文件选择器限制)
操作步骤
- 进入目标文件夹(顶部面包屑确认位置)
- 选择文件或直接拖入(支持多选)
- 系统自动按扩展名识别类型(word / excel / picture / archive 等),保存到
uploads/file/<type>/<年月>/<id>/ - 若同名同后缀文件已存在,可选「保留两个」(默认)或「覆盖」(cover 参数 1)
上传文件夹
- 拖入整个文件夹时,系统会自动按
webkitRelativePath重建文件夹结构 - 路径中每一级文件夹会自动创建(已存在则复用)
- 空目录会被忽略(只创建有文件的层级)
字段默认值
- 拥有者(userid):当前文件夹的拥有者(避免共享目录混乱)
- 父目录:当前所在文件夹
- 版本:上传产生一条新的 FileContent 记录(详见 file.version.concept)
大文件 / 断点续传 / 秒传
- ≥10MB 自动分片:文件切成 5MB 分片,3 路并发上传;前端先在 Web Worker 算 md5(不卡 UI)
- 断点续传:上传中刷新页面或断网后,重新选同一文件会跳过已上传分片,从中断处继续
- 秒传:同用户已上传过同 hash 文件(命中
files.hash),目标文件夹立刻出现新记录,零传输 - 状态保存:服务端 Redis
upload:*key TTL 24h;浏览器 localStoragechunked_upload:<hash>索引同样 24h - 残留磁盘自动清理:
uploads/tmp/chunks/{userid}/{upload_id}/超过 24h 由DeleteTmpTask兜底清除
不支持
- 无法向直接子项 ≥ 300 的文件夹继续上传(会被拒绝)
- 跨设备 / 跨浏览器续传(localStorage 索引仅本机有效;服务端按 hash+userid 反查可兜底)
- 不支持移动端后台续传(应用切到后台可能中断)