pub(crate) async fn process_image_upload(
data: Bytes,
original_filename: Option<String>,
) -> Result<UploadOutcome, UploadError>Expand description
单一图片入库流水线(web 上传 / MCP bearer 端点 / MCP URL 抓取共用)。
输入:原始字节 + 可选展示文件名。不信任客户端声明的 MIME——以 magic
bytes 为唯一真相。输出可直接嵌入 Markdown 的 /uploads/... URL。
步骤:大小校验 → magic bytes 检 MIME → 尺寸/像素校验 → SHA-256 去重(命中
即复用,跳过最贵的转码)→ GIF/WebP 解码校验 → spawn_blocking 转码 →
按日期落盘 → assets 登记(含并发竞态补偿,落败者删自己的文件复用胜出者)。