文件与存储服务应怎样设计?
先说出你的答案
定义边界、关键机制、一个反例;P8题再补容量、失败与验证。
查看完整题解
参考回答
直接回答
先区分上传入口、元数据与权限、实际文件存储,再给文件稳定标识、大小类型限制和下载规则。Boot能接收multipart与组织服务,但不自动提供安全存储平台。用户文件通常应放外部持久卷或对象存储,不写到JAR内部,也不直接按客户端原名拼接磁盘路径。
讲清原理
请求阶段临时文件有自己的清理时机,异步处理前要可靠转存。存储成功与元数据提交可能分步失败,需有可恢复状态和孤儿清理,不能只依赖一次try/catch就保证二者永远一致。
下载根据业务授权,限制路径和响应头;客户端Content-Type、扩展名均不可直接信任。直传对象存储可减少应用转发流量,但上传凭证范围、有效期和完成确认仍需受控。
例子与易错点
测试超限、空文件、非法路径、未授权下载及失败重试。模拟multipart能测参数,不等于真实容器限制、磁盘空间或对象存储策略已验收。
以下为 Java 21 类成员示例,放入同一外部类中使用,依赖 Boot4.1.2 / Framework7.0.10。只接受服务器标识而非用户原名;这是路径选择示例,未写文件,也不能单靠它解决符号链接、权限与内容检查。
static java.nio.file.Path controlledTarget(java.nio.file.Path base,String serverId) {
if (!serverId.matches("[A-Za-z0-9_-]+\\.bin")) throw new IllegalArgumentException("invalid-id");
var root=base.toAbsolutePath().normalize();
var target=root.resolve(serverId).normalize();
if (!target.startsWith(root)) throw new IllegalArgumentException("outside-root");
return target;
}
相关题:第 10 题、第 44 题、第 49 题。
和评分标准对照,你能独立回答到哪一步?
自评会安排下一次复习,不保存你的口述内容。
这道题,你掌握得怎么样?
掌握程度由你主动标记,阅读和收藏不会自动改变状态。