Files
easygoadmin-wiki/EasyGoAdmin_GoFrame_EleVue/zh/tools/file-components.md
T
2026-10-20 21:19:44 +08:00

72 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 7.5 前端文件组件
:::tip 概述
前端文件能力集中在 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 |