Commit Graph

1 Commits

Author SHA1 Message Date
Blizzard bf3b0048fd fix(desktop): 原生下载失败会在用户选定路径上留半截文件
桌面端 Go 侧此前零测试。补 5 个(download/ReadLocalFile/Ping),
逮到一个真 bug:io.Copy 中途断开时,用户选定的路径上会留下一个半截的
.docx —— 带着用户自己起的名字躺在那儿,虽然前端会弹错误,但以后双击打不开,
而用户会以为是导出功能坏了。现在失败一律 os.Remove 不留残file。

同批修的两处(同一段代码,都没测试盖到):
- Close 的错误被 defer 吞掉。写文件时 io.Copy 成功不代表数据落盘,
  flush 失败只在 Close 上报——吞掉就是静默截断,且 download 返回 nil(成功)。
- http.Get 用默认 client,没有超时。上游卡住的话「另存为」会永远转,
  用户只能强杀 app。改用带 3 分钟超时的 client。

顺带核实过一个可疑点、结论是不用改:download 走裸 http.Get 不带鉴权头,
但报告导出路由 `/reports/:id/export` 是故意公开的(router.go 注释:
"EventSource/下载无法带 Bearer"),所以能通。

对话框本身(application.Get().Dialog)要真窗口,自动化盖不到,仍需手点。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 12:06:21 +08:00