Skip to content

7.5 前端文件组件 ​

概述

前端文件能力集中在 components/Upload(上传组件族)与 utils/downloadFile(下载工具),配合两段式上传协议:选择文件即调 /api/upload/uploadFile 拿 temp URL,表单提交随业务接口转正。

组件清单(ui/src/components/Upload 等) ​

组件/工具职责
Upload上传组件族(单图/多图/普通文件形态)
Cropper / vue-cropper图片裁剪(头像上传场景:裁剪后上传)
importFile导入文件组件(Excel 导入入口,配合 Excel 组件)
utils/downloadFile文件下载工具(导出 URL 下载)
Editor(TinyMCE/Quill)富文本编辑器(内嵌图片上传协作,见 7.3)

上传组件与后端协议的协作 ​

text
1. 用户选择文件 → 前端 POST /api/upload/uploadFile(multipart,字段 file)
   可带 type=image 走图片规则(魔数嗅探)
2. 后端 SaveTemp 落临时目录 → 返回 {originalName, fileExtension, fileType, fileSize, fileName, filePath, fileUrl}
3. 组件回显 fileUrl(预览)、originalName(文件名);表单数据持有 fileUrl
4. 表单提交(exampleAdd/articleAdd 等)→ 后端 spec.saveTransform
   → SaveFromTemp 把 temp URL 转正 → 库存相对路径
5. 详情回显 → 基座 GetFileUrl 补域名 → 组件直接展示

关键认知:前端只持有 URL(temp 或正式),永远不关心物理路径;转正发生在业务表单保存时,不在上传时。

头像上传(Cropper 场景) ​

text
选择图片 → Cropper 裁剪 → 裁剪结果上传 /api/upload/uploadFile(type=image)
→ 得到 temp URL → 头像组件预览
→ 保存资料(index.updateProfile)→ 后端 SaveFileField(avatar, "user") 转正

多图字段(article.images) ​

text
多图上传 → 每张走 uploadFile → 组件持有 URL 数组 → 表单逗号拼接
→ 后端 MultiFileFields 声明 → SaveFromTempMulti 逐个转正
→ 库存逗号分隔相对路径

下载工具(utils/downloadFile) ​

text
导出接口返回文件 URL → downloadFile 触发浏览器下载
(导出文件在 /upload/temp/...,受 tempExpireDays 清理——及时下载)

开发对接要点 ​

场景要点
新页面接上传用 Upload 组件 + 表单字段持 URL;后端 spec 声明 FileFields + FileSaveDir
图片类字段上传带 type=image(后端魔数嗅探);后端注释含"图片"(生成器识别为图片列)
多图MultiFileFields + 逗号分隔约定
富文本内图片走 Editor 的上传通道(temp URL 入正文),保存时 Localize 统一转正
大小/类型拦截前端可预校验(体验优化);真值以后端白名单与 maxSize 为准

排障 ​

症状原因
上传成功但保存后 404转正失败或 domainUrl 配置错;查库中相对路径与 GetFileUrl
上传被拒扩展名/大小/嗅探——对照 file.* 配置(7.2 上传配置详解)
预览正常发布后失效temp 已被 CleanTemp 清理——表单保存(转正)没发生或失败
多图只保存最后一张前端未逗号拼接或后端未声明 MultiFileFields

小蚂蚁云团队 · 提供技术支持