文件上传流程
controller层
- 前端会对文件先进行MD5计算出唯一标识,再进行分片向后端发出分片上传的请求
- 在每个文件第一个分片的时候要进行验证,截取文件的扩展名,验证改文件类型是否支持
- 如果文件没有所属的组织标签,那么就获取该用户的主组织标签,并设置这个文件所属组织
Service层 - 先查询mysql数据库中 file_update 表是否存在这个文件 MD5 标识,查询是 file_MD5 + usrId 一起查询,如果不存在就创建
- 双层校验:第一层:检查Redis(或其他缓存)中是否标记该分片已上传,第二层:检查数据库(chunk_info表)中是否有该分片的记录
- 处理 “分片已上传但数据库无记录” 的异常场景
if (chunkUploaded) {if (!chunkInfoExists) {// 计算分片MD5、构建存储路径// 检查MinIO中是否真的存在该分片// 如果MinIO中不存在,把chunkUploaded设为false,触发重新上传} else {return; // 分片已上传且数据库有记录,直接结束}
}
- 分片实际上传到 MinIO(核心操作),并且在 Redis 中标记分片已上传
- 补充分片信息到数据库(chunk_info 表)
前端对文件进行分片
- 前端使用 MD5 算法把文件的二进制数据转换成32位字符串,作为这个文件的唯一标识。
- 还有 SHA-256 算法成长64位字符串,安全性远高于 MD5 算法