专题归档 · 2025 年 9 月(编辑分组,非实际写作日期)
实习联调:文件上传完成了,为什么资源还不能用?
课程附件上传、资源登记、预览与下载的分阶段数据契约。
上传成功只是其中一段
当时课堂资源上传需要完成多个动作:选择文件、分片上传、服务端合并文件、返回资源标识、将资源保存到业务系统,最后再把它关联到课程。
其中一个重要疑问是:上传合并已完成,是否还需要另一个 API 才能把资源真正纳入课程? 这种双阶段流程容易出现“文件存在但页面找不到附件”的状态。
预览与下载也不是一条路径
另一份短记录讨论 PDF、视频等不同文件类型的预览和下载,包含下载进度、Blob URL、直链回退的实现样本。它说明界面里的“能预览”和“已在后端建立业务关联”是两个不同的问题。
一次文件操作其实至少有三个不同状态
后来我把“资源可用”拆成三个问题:
- 存储可用:文件分片已经合并、得到文件或对象标识;
- 业务可用:课程或课堂详情接口包含可识别的附件关系;
- 消费可用:用户当前登录状态具有查看/下载权限,预览组件也支持文件类型。
这解释了为什么一个页面能显示“上传成功”,但刷新课程后附件仍然消失;也解释了为什么下载地址能打开,不等于能在当前页面内直接预览 PDF 或视频。
对于预览,用户界面还要处理浏览器限制、对象 URL 的回收、网络失败,以及不能内嵌显示时退化为下载。具体做法取决于文件服务是否提供稳定的公开/授权 URL,不能机械地把“生成 Blob URL”当成所有情况的解决方案。
保留疑问,不复制真实数据
当时遇到的上传失败还需要沿文件合并、资源保存与课程关联逐步定位。比起盯着某个文件 URL,我更愿意检查整个操作链路在哪一步丢失了状态。