Skip to main content

Module upload_pool

Module upload_pool 

Source
Expand description

上传引擎内部状态机(校验规则 / worker 池并发调度),与 UI 完全解耦。 上传引擎内部状态机:与 UI 完全解耦的纯逻辑(无 view! / 无组件), 供 crate::components::assets::AssetUploadModal 组合使用。

三条入口(点击选择 / 拖拽 / 粘贴)收敛到同一个 enqueue_files:拿到的 web_sys::File 先过 validate_file(镜像服务端 5MiB / 四种 MIME 的硬限制, 不合格立即记失败行、不发请求),合格项入共享队列后由 worker 池并发上传: 在跑 worker 数上限 = 并发配置(「站点配置」面板 / UPLOAD_CONCURRENCY env 播种, 挂载时经 get_upload_settings 拉取,失败回退默认 3)。每个 worker 张间停顿 500ms × 当前并发数——N 路并行时聚合速率恒 ≤ 2/s,与默认上传限流桶 (RATE_LIMIT_UPLOAD_PER_SEC=2 / BURST=15)对齐:N=1 时与旧顺序版逐张 500ms 完全一致,N 调大也不触发 429。上传管线与文章编辑器完全同源 (upload_image_file → utils::web_upload::post_multipart_file → POST /api/upload)。

注:worker 池共享状态用 Rc<UploadPool>:各入口闭包与 worker 克隆的都是 Rc, 共享同一份队列与句柄表。含 web_sys::File 的池不是 Send + Sync,由组件放进 StoredValue::new_local 持有,并在 on_cleanup 里调用 UploadPool::dispose 释放文件句柄、清空队列并让在跑的 worker 退出。

Structs§

UploadItem
列表行数据(纯数据,两端都可编译;web_sys::File 句柄不进 signal, 由 WASM 端的 files 表以 id 关联保存,供重试取回)。

Enums§

UploadStatus
单条上传状态机:Queued → Uploading → Done / Failed(原因)。