Skip to content

7.2 上传配置详解 ​

概述

上传行为全部由 config.yaml 的 file.* 配置块控制:物理目录、访问域名、扩展名白名单、大小上限、临时保留天数。本节逐键说明与调优建议。

配置全貌 ​

yaml
file:
  uploadDir: "upload"       # 物理根目录(相对项目根或绝对路径)
  domainUrl: ""             # 文件访问域名,为空时使用 /upload/ 相对路径
  tempDir:   "temp"         # 临时目录名,位于 uploadDir 下
  imageExt:  "gif,jpg,jpeg,png,bmp,webp,svg"    # 允许的图片扩展名
  fileExt:   "gif,jpg,jpeg,png,bmp,webp,svg,doc,docx,xls,xlsx,ppt,pptx,pdf,zip,rar,txt,csv,mp3,mp4,sql,js,css"  # 允许的文件扩展名
  maxSize:   10             # 单文件大小上限(MB)
  tempExpireDays: 7         # 临时目录保留天数,超期自动清理,0 表示不清理

逐键说明 ​

键作用调优建议
uploadDir上传物理根目录容器部署挂独立卷(跨卷 Rename 回退复制);权限最小化
domainUrl文件访问域名空 = /upload/ 相对路径(同域反代场景);CDN/独立文件域名时配置完整 origin;SaveFromTemp 按此前缀识别"本站 URL"
tempDir临时目录名保持默认;位于 uploadDir 下,CleanTemp 按它定位
imageExt图片白名单按需增减;svg 在白名单时由 Response 中间件附件化兜底
fileExt普通文件白名单对公网用户开放上传时建议收紧——当前含 js/css/sql,公开场景应移除
maxSize单文件上限 MB表单上传场景 10 足够;大文件场景配合同步调 Nginx client_max_body_size
tempExpireDaystemp 保留天数0=不清理(不建议);默认 7 天覆盖正常"上传→提交表单"周期

domainUrl 的三种部署形态 ​

text
形态一:同域反代(推荐)
  domainUrl: ""(空)
  前端经 Nginx 同域访问 /upload/**,SaveFromTemp 以 /temp/ 前缀识别

形态二:独立文件域名/CDN
  domainUrl: "https://files.example.com"
  上传返回 https://files.example.com/temp/...;
  SaveFromTemp 匹配此前缀剥离域名后转正

形态三:后端直出
  domainUrl: "http://backend:8000"
  静态访问由 SetServerRoot("resource") 提供

domainUrl 一致性

domainUrl 决定"本站 URL"的判定——库里存相对路径、展示层拼域名。改 domainUrl 后旧数据无需迁移(相对路径不变),但外链判定/转正识别以新前缀为准。

安全链与配置的关系 ​

text
大小限制     ← maxSize
扩展名白名单 ← fileExt / imageExt
图片魔数嗅探 ← type=image 时强制(配置不可关)
随机文件名   ← 固定行为(32hex / HHmmss_4hex,防猜路径/覆盖)
两段式       ← 固定行为(未过校验不进正式目录)
svg 加固     ← Response 中间件固定行为(attachment+nosniff)
temp 清理    ← tempExpireDays + 每日 03:30 gcron

生产加固建议 ​

text
1. fileExt 按业务收紧:纯图片业务 fileExt=imageExt 即可
2. maxSize 与 Nginx client_max_body_size 对齐(防绕过)
3. uploadDir 挂独立卷并限制执行权限(防上传 js 被解析执行——
   静态服务只应返回文件内容)
4. domainUrl 走 CDN 时配置防盗链(CDN 侧)
5. tempExpireDays 保持 ≤7(缩短未转正文件暴露窗口)

验证配置生效 ​

sh
# 上传超限 → 拒绝并提示大小
# 上传白名单外扩展名 → 拒绝
# 上传后检查:
ls upload/temp/$(date +%Y%m%d)/      # 阶段一落盘
ls upload/user/$(date +%Y%m%d)/      # 表单保存后转正
# temp 清理验证:改小 tempExpireDays 观察 03:30 清理日志

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