weicw 76c9edd4be feat(file): 上传准入白名单 + 素材媒体大类筛选
素材库要从「只传图片」放开到文档与音视频,后端必须先有一道类型防线:
/api/file/upload 此前对文件类型零校验,任意文件都能落到公开可读目录。

- UploadRules:image/* 按探测 MIME 放行(历史头像/图标格式多,不做后缀白名单);
  其余按后缀白名单(pdf/doc/docx/xls/xlsx/ppt/pptx/txt/md/csv、
  mp3/wav/m4a/aac、mp4/mov/webm),再用危险 MIME 黑名单兜住 exe 改名。
  不用「扩展名必须等于探测类型」的严格比对:docx/xlsx/pptx 经 Tika 常得到
  application/zip,md/csv 得到 text/plain,严格比对会误杀正常办公文档。
- FileStorageService.store 落盘后校验,本地分支失败删除刚写的文件,不留孤儿。
- FileController 单独捕获 UploadRejectedException,把原因原样回给前端。
- FileRecordParam.mediaCategory + Mapper 展开成 image/video/audio/doc 四类条件:
  「文档」在 MIME 里没有统一前缀,只能落到 application/% | text/%。

设计取舍见 docs/adr/0004(本仓库外,tuanwei-home)。
2026-11-01 21:03:56 +08:00
2026-07-20 11:48:06 +08:00
2023-06-03 23:56:49 +08:00
2026-07-20 11:48:06 +08:00
2023-06-03 23:56:49 +08:00
2024-01-31 14:55:59 +08:00
2023-06-03 23:56:49 +08:00
2026-07-20 11:48:06 +08:00
2023-06-03 23:56:49 +08:00
2025-05-22 10:27:57 +08:00
S
Description
No description provided
13 MiB
Languages
Java 99.5%
Shell 0.5%