小白了解网盘项目(1)
网盘项目也可以说是一种文件管理项目。
主要我们学习的网盘是 奇文网盘
首先我们此类项目分为前端和后端,作为java开发的我们主要看后端,前端简单的明白就可以。
可以分为具体的对象文件存储 和 数据库中相关信息的存储两类。
基本上每个网盘项目的具体存储都需要后面的存储文件的服务器构成。
具体的文件服务有 OSS FastDFS MinIO 七云牛KODO
这个网盘项目主要就是把对 存储服务器的各种操作进行了封装
上传 , 删除 , 下载 ,预览 ,读取,写入
奇文网盘的核心,就是ufop
就是一个可以操纵 OSS FastDFS MinIO 七云牛KODO 的统一平台。
这么说,究其核心,还是调用了 各种云服务存储提供的 api
该项目使用了工厂模式的设计模式
其主要作用是通过定义一个创建对象的接口,但将实际创建对象的逻辑推迟到子类中。这样可以在不必指定具体类的情况下创建对象,从而提高了代码的灵活性和可维护性。
UFOP的配置类,确保依赖的类存在时才加载相应的配置,同时实现属性的绑定和导入其他配置类的功能。
并将所有所用到的类进行实例化
在其项目中 domain
领域,存在于大多数文件夹中,这种命名方式是
通常指的是领域模型(Domain Model)。领域模型是软件工程中一种设计模式,用于表示现实世界中的概念和实体,它们通常对应于业务领域中的概念和对象。
业务实体的抽象:领域模型用于描述业务领域中的各种实体、概念和规则。它不仅仅是数据结构的定义,还包括了数据之间的关系和业务逻辑。
与业务紧密相关:领域模型通常直接反映了业务领域中的概念和实体,因此具有高度的业务相关性。
封装业务逻辑:领域模型不仅包含数据属性,还可以包括对这些属性进行操作和处理的方法,这些方法称为领域服务或者领域方法。
用于数据持久化:领域模型与数据库中的表结构通常有映射关系,可以通过数据访问层(DAO,Data Access Object)将领域模型持久化到数据库中。
在项目中,每种操作需要传入 云存储服务 API 所需要的参数
获取上传路径、获取云存储服务客户端、获取输入流、对文件进行命名、等等操作都在其中进行。
他对每一种操作,都用抽象类进行了规范
每种操作,必不可少的都是文件的url ,所以,url一定会存储到数据库中
在上传中,保存了每个上传成功的分块信息,用于后续完成分块上传任务。
如果因为网络等故障原因,可以通过redis保存的信息重新恢复上传。
利用 Redis 的原子操作特性,实现对上传任务的并发控制和数据一致性管理,确保多个上传任务之间不会相互干扰或冲突。
在分块上传中,一个重要的名字是 PartETag
PartETag
是亚马逊 S3(Simple Storage Service)中用来标识上传文件分块的实体标签。在分块上传过程中,每个成功上传的文件分块都会返回一个 PartETag
,用于标识该分块在整个文件中的位置和内容验证。
具体来说,PartETag
包含两个主要信息:
-
Part Number(分块编号):表示当前分块在整个文件上传中的顺序编号,从 1 开始递增。
-
ETag(实体标签):表示当前分块的数据内容的 MD5 散列值,用于校验分块的完整性和一致性。
在分块上传完成后,所有分块的 PartETag
将会被收集起来,用于完成最终的文件合并操作。当所有分块的 PartETag
都被确认后,服务端可以根据这些信息将所有分块按照正确的顺序合并成完整的文件,并返回上传成功的响应。
总结来说,PartETag
是分块上传过程中每个分块的唯一标识符,包含了分块的序号和用于校验数据完整性的哈希值,确保了分块上传的可靠性和完整性。
顺便学习了一种新的语法
catch (MinioException | InvalidKeyException | NoSuchAlgorithmException | IOException e) {
e.printStackTrace();
}
|
多异常捕捉
UFOP主要的核心功能是包装了各种云存储服务的api,以其为自己所用
分块上传最重要的是保证文件的完整和有序的上传。
通过redis 分布式锁 和键值对存储 可以控制和快速的获取上传的信息。