becomer 72dd2645ec
ci/woodpecker/tag/build Pipeline was successful
前端上传 OBS 显式附带 filename,避免部分环境 400
对真实 OBS 做了 5 组对照(真实用户 cookie + 真实策略 + 真实上传):

  filename=file.jpg   CT=image/jpeg        → 204 成功
  无 filename         CT=image/jpeg        → 400 失败
  filename=blob       CT=image/jpeg        → 204 成功
  无 filename         CT=octet-stream      → 400 失败
  filename=image.jpg  CT=octet-stream      → 204 成功

结论:file 部分必须带 filename,否则 OBS 直接 400;与 Content-Type 无关。

原代码 `obsForm.append('file', file)` 只传两个参数。浏览器对
append(name, Blob) 会按规范自动补 filename="blob",所以多数桌面/移动
浏览器能通过;但自动补的名字无扩展名,且部分环境(老 WebView、
App 内置浏览器)不补,就会命中上表的 400 分支。

改动:
- 新增 utils/obsUpload.ts:resolveUploadFileName 优先用原始文件名
  (无扩展名时按 MIME 补),无 name 时按 MIME + 时间戳生成;
  非图片/未知 MIME 回退 jpg。
- HomeView.vue(任务表单上传)与 LeaveView.vue(请假上传)两处
  append 均改为显式传文件名。

说明:本次未定位到用户 400 的确切链路(后端复现 return_register 得到的是
cookie_expired 而非 400),此项为消除已知的 filename 差异,
使前端行为在任何环境下都稳定。
2026-10-18 18:58:24 +08:00
S
Description
No description provided
6.6 MiB
Languages
Go 58.2%
Vue 35.3%
TypeScript 4.1%
CSS 1.5%
JavaScript 0.6%
Other 0.2%