Skip to content

基于SpringCloud-Alibaba和Minio的文件分享系统

Notifications You must be signed in to change notification settings

derecknowayback/BYR_FileSys

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BYR_FileSys

项目基本信息

项目名称:文件分享系统后台模块(基于Minio数据库)

负责人:Dereck_Chen

目标:

坤坤有许多文件想和i坤们分享,但是很遗憾Firefox Send已经停止服务,而且使用第三方软件会先将文件传输到第三方服务器再下载回来,这会增加出网络负担,并不优雅。你能帮坤坤写一个简单的文件共享网站么?

完成一个搭建在内网的文件分享网站

api文档:项目地址

需求分析

因为真的不是很懂前端,所以只做了后端的模块。后端提供API给前端有:

  • 登录/注册用户

  • 用户请求上传文件

    • 后端接收到文件后发送给S3服务存储

    • 记录文件信息到数据库中

    • 生成并返回一个分享短链接

      这个链接就是文件名

  • 用户访问短链接

    • 返回文件信息,如大小、共享人、共享时间
  • 用户在短链接页面点击下载,返回文件内容

时间线

项目历程:2022年10月25日 - 2022年11月18日

项目时间线

image-20221116102722502

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:

  1. 注册成功之后,会存用户到mysql
  2. 登录/注册成功后都会往缓存中存用户的token,同时返回给前端token
  3. 每次执行请求都会动态刷新token的ttl

文件存储:

上传:前端上传文件给后端服务器,后端服务器发送文件给Minio数据库,同时将文件的有关信息存在数据库中。

下载:前端请求文件名,支持模糊查询,后端返回数据库中文件的详细信息,比如下载url、大小等等。

About

基于SpringCloud-Alibaba和Minio的文件分享系统

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published