Sunday 的面试指南

大文件上传怎么设计?分片上传、断点续传和秒传有什么区别?

🧑‍💻 面试官:几个 GB 的文件,网络断了一次,你让用户从头传吗?

🙋‍♂️ 我:可以把文件分片,记录已完成分片,恢复后只传缺的部分。

🧑‍💻 面试官:浏览器写着第 7 片已经完成,服务器却没有它,以谁为准?

🙋‍♂️ 我:以服务端确认的上传状态为准。

🧑‍💻 面试官:那用户给我一个已有文件的哈希,就能直接获得它?合并成功以后,文件是不是马上可以公开下载?

上传设计要抓住「可确认的进度与使用权限」。分片解决传输组织,续传解决进度恢复,秒传解决重复上传,但都不能替代鉴权和文件校验。

面试速答(60 秒版)

分片上传是把大文件拆成多个部分分别传输,便于控制单次失败成本和并发。服务端需要用上传会话、分片序号与校验信息组织它们,最后完成合并或对象存储提交。

断点续传是在中断以后,根据服务端确认的已完成分片继续传缺失部分。不能只相信浏览器本地进度,也要确认还是同一个文件、同一上传会话。

秒传是发现可复用内容后避免再次上传,但文件哈希只能用于匹配,不能证明用户有权限。需要文件归属、授权或适用的持有证明,不能让知道哈希的人直接拿走别人的文件。

最后还要校验大小、完整性和允许类型,处理失败会话与分片清理。上传完成、校验通过和可供业务使用,最好有明确状态。

分片、续传、秒传:不同问题

知识点详解:文件变成很多片以后,怎样重新得到可靠结果?

先建立上传会话,再接收分片

服务端先确认用户身份、文件大小限制和目标位置,创建上传会话,例如一个 uploadId。

后续分片都绑定这个会话,带上分片序号、长度及必要校验信息。并发上传时,到达顺序可能不同,所以不能按“先收到的排前面”拼接。

重试同一片,也不能重复追加。服务端需要明确同一会话、同一序号是覆盖、拒绝,还是在校验一致时复用。

Amazon S3 分片上传说明展示了初始化、上传分片与完成提交的流程。自建系统也需要相应的状态与校验,不是仅在前端把数组切开。

续传恢复的是服务器承认的进度

假设浏览器已经发送了第 7 片,但收到响应前网络断开。它不知道服务器是否保存成功。

重新连接后,可以查询会话中已完成分片与对应校验信息,再决定重传哪些部分。只记录“前端已发送字节数”,可能把没保存的部分跳过去。

同时需要确认文件没有换。用户改了本地文件,文件名仍然相同,也不能接着旧会话传。可以结合文件大小、校验、版本等信息判断,但标识策略与完整性检查要说清楚。

如果使用对象存储,还需要保存它规定的分片编号与 ETag 等提交信息。multipart ETag 不应被一概当作整个文件的 MD5。

续传,以服务端确认为准

完成上传,不是简单把分片数量数一遍

服务端需要确认预期分片齐全、顺序正确,检查每片与整体的完整性,并根据方案提交为最终对象。

合并可能失败,完成请求也可能结果不确定。因此,重复完成请求应该能查询或返回已有结果,不生成多个重复业务文件。

可以把状态分成:

状态表示什么下一步
上传中部分分片已确认继续或恢复上传
待校验内容已组装或完成提交检查完整性与安全
可用满足业务要求在权限内引用文件
失败或过期无法继续完成保留原因并按规则清理

不是所有应用都需要完全相同的状态名,但“收到字节”与“允许使用”应该分清楚。

秒传为什么不能只凭哈希?

服务端发现某个哈希对应的文件已经存在,可以考虑复用存储内容。但知道哈希,不能证明用户拥有原文件,更不能证明他能读别人的附件。

一种常见思路,是把内容去重和用户文件记录分开。物理对象可以在内部复用,用户能看到什么、能下载什么,仍然通过授权关系决定。

对于需要验证用户确实持有内容的方案,还要设计适用的持有证明,并防止查询接口泄露敏感文件是否存在。不能把哈希当成下载口令。

哈希相同,不等于有权下载

文件安全和清理,要放进主流程

文件名和 Content-Type 都可能不可信。需要按场景限制类型、大小与数量,校验内容,避免可执行文件直接进入可执行目录。

OWASP 文件上传指南讨论了这些防护。必要的恶意内容检查、隔离与权限也不能因为采用对象存储就省掉。

未完成的会话和分片需要过期清理。清理时也要避免误删仍在继续的上传,可以使用明确状态、租期或条件更新。并发数和分片大小则通过网络条件、内存、服务成本与重试效果测量,不凭经验认定某个数字适合所有文件。

面试官继续追问

浏览器进度到了 100%,是不是已经上传成功?

不一定。可能只是字节发送完成,还没得到服务端确认,也可能正在合并或校验。UI 应展示实际阶段,而不是把发送进度当成最终结果。

秒传和断点续传有什么区别?

秒传复用已经存在且允许使用的内容,避免再次传;续传继续一个未完成的上传。它们解决不同阶段的问题。

可以直接把对象存储密钥给前端吗?

不能暴露长期、宽权限密钥。可以使用限定目标、有效期和权限的临时上传授权,并在完成阶段校验归属与结果。

面试速记卡

  • 分片:组织大文件传输,失败时重试局部。
  • 续传:根据服务端确认进度,继续同一文件和会话。
  • 完成:检查分片与整体,结果不确定时可查询。
  • 秒传:内容匹配不等于授权,哈希不是下载口令。
  • 生命周期:上传、校验、可用与过期清理分别管理。
简历汪永久免费在线制作简历,模板直接套用、导出无水印,永久免费、下载免费,不需要付费解锁任何功能。去写简历