项目名称:文件分享系统后台模块(基于Minio数据库)
负责人:Dereck_Chen
目标:
坤坤有许多文件想和i坤们分享,但是很遗憾Firefox Send已经停止服务,而且使用第三方软件会先将文件传输到第三方服务器再下载回来,这会增加出网络负担,并不优雅。你能帮坤坤写一个简单的文件共享网站么?
完成一个搭建在内网的文件分享网站
api文档:项目地址
因为真的不是很懂前端,所以只做了后端的模块。后端提供API给前端有:
-
登录/注册用户
-
用户请求上传文件
-
后端接收到文件后发送给S3服务存储
-
记录文件信息到数据库中
-
生成并返回一个分享短链接
这个链接就是文件名
-
-
用户访问短链接
- 返回文件信息,如大小、共享人、共享时间
-
用户在短链接页面点击下载,返回文件内容
项目历程:2022年10月25日 - 2022年11月18日
项目时间线
Commits · derecknowayback/BYR_FileSys (github.com)
项目是23号左右接到通知的,当时看了几个选题,其他选题我都不是很熟悉,只有这个文件系统和我的技术栈比较切合,所以就选了这个项目。
项目总共三周。
第一周时间主要来确定基本的架构,搭建环境,熟悉Minio,创建库创建表。
很不巧马上第二周期中考了,复习去了。这一周主要是小修小补,跑通mysql有关的测试,顺带学习Minio。
考虑到原先登录做的比较“原始”(redis+mysql),这次学习了Spring Security来做登录。
第三周在纠结要不要做前端,靠着半吊子前端三件套基础看了看 thymeleaf和bootstrap,写了几个页面,但是使用起来有诸多问题,比如“表单的提交格式和后端接口不匹配”...最后实在觉得前端太难一周速成了,就放弃了。这也是这次走的最多的弯路?
可扩展:服务容量易提升,为将来功能拓展准备
低耦合:不同模块之间各司其职,减少关联
高容错:单个模块、服务异常不影响整体系统运作
可管理:配置云端管理,不需要重启
可观测:数据流量追踪有迹可循
文件上传下载稳定:文件存的放心,上传下载速度够快
开发相关
- Alibaba Nacos: 微服务配置、发现中心
- Spring Cloud Gateway: 服务网关
- SpringSecurity: token模式权限校验
- mybatis-plus: 数据库连接和ORM
- SpringDataRedis + redis: Redis缓存
运维相关
- doker:容器解决方案
整体架构:
登录过程:
PS:
- 注册成功之后,会存用户到mysql
- 登录/注册成功后都会往缓存中存用户的token,同时返回给前端token
- 每次执行请求都会动态刷新token的ttl
文件存储:
上传:前端上传文件给后端服务器,后端服务器发送文件给Minio数据库,同时将文件的有关信息存在数据库中。
下载:前端请求文件名,支持模糊查询,后端返回数据库中文件的详细信息,比如下载url、大小等等。