From 6c18ebd476af0cbd2389312ee79434a0357c4c67 Mon Sep 17 00:00:00 2001 From: WuYongJie Date: Thu, 28 May 2026 21:20:30 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=B8=8B=E8=BD=BD=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E9=97=AE=E9=A2=98=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/商业化地基排查问题清单_20260524.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/商业化地基排查问题清单_20260524.md b/docs/商业化地基排查问题清单_20260524.md index 0b94b61..9aec0ec 100644 --- a/docs/商业化地基排查问题清单_20260524.md +++ b/docs/商业化地基排查问题清单_20260524.md @@ -1198,22 +1198,22 @@ NAS 私有化系统可能在平板或窄屏浏览器里使用。模板编辑器 - 如果需要表达状态,优先使用绿色、橙色这类语义色;普通分类继续使用中性色。 - 首页素材卡片、筛选栏和后台表格需要在浏览器里继续做实际页面验证。 -### P2-14 下载统计可能虚高 +### P2-14 下载统计可能虚高(已修复) 客户影响: -下载日志和次数在确认文件可读取前就写入,文件不存在或读取失败也可能被统计为下载。 +历史风险是下载日志和次数在确认文件可读取前就写入,文件不存在或读取失败也可能被统计为下载。当前代码已改成先确认文件可读或对象流可获取,再记录下载日志和增加次数。 证据: -- `app/api/materials/download/route.ts:97`:先创建下载日志。 -- `app/api/materials/download/route.ts:120`:先增加下载次数。 -- `app/api/materials/download/route.ts:130`:后面才判断文件路径。 -- `app/api/materials/download/route.ts:217`:后面才读本地文件。 +- `app/api/materials/download/route.ts`:S3 路径先调用 `getS3ObjectStream()` 获取对象流,本地 legacy 文件先 `access(filePath)` 确认可读,然后才调用 `recordDownloadIfNeeded()`。 +- `app/api/materials/download/route.ts`:`recordDownloadIfNeeded()` 仍负责创建下载日志并递增 `downloadCount`,但只在下载响应准备成功后执行。 +- `app/api/materials/download/__tests__/route.test.ts`:已覆盖 legacy 本地文件不存在时返回 404,且不记录下载日志、不增加下载次数。 建议动作: -- 确认文件可读或签名 URL 生成成功后,再写下载日志和计数。 +- 已完成:下载统计不再在文件不存在时虚增。 +- 后续如改成预签名 URL 或后台打包下载,也要保持“确认可交付后再记数”的规则。 ### P2-14A 监控页导出素材 CSV 复用普通素材列表接口(已补管理员专用接口)