又一款国产开源企业级文件管理系统诞生了!基于 Spring Boot 3.5.x + Sa-Token + MyBatis Flex

前几天在技术群里看到大家讨论企业网盘选型。付费的太贵,开源的功能不够完整,部署维护又麻烦------这些问题很多团队都遇到过。想要一个能处理大文件、支持在线预览、还能多云存储的方案,确实不容易找。

Dromara 开源社区前段时间新进了一个基于 Spring Boot 的文件管理系统 ------ Free-FS,我研究了一下,功能比较完整,架构也清晰,分享给大家(JavaGuide 所有开源项目分享都无商务性质,纯分享,欢迎自荐,地址: github.com/CodingDocs/...

Free-FS 是什么?

Free-FS 是一个企业级文件管理系统后端,基于 Spring Boot 3.5 + MyBatis Flex + Sa-Token + React/Vue 构建。

主要功能包括大文件分片上传/断点续传/秒传、多格式在线预览、多云存储插件化扩展、权限控制、回收站等。有配套的 Vue 3 前端。

这里给不懂的朋友简单解释下上面提到的几个关键术语:

术语 含义
分片上传 把大文件切成多个小块分别上传,网络中断后只需上传未完成的分片
断点续传 记录上传进度,中断后从断点继续,不用重新上传整个文件
秒传 通过计算文件哈希值(如 MD5、SHA-256),如果服务器已有相同哈希的文件,直接建立引用而不上传实际数据

它解决了什么问题?

企业文件管理常见的几个麻烦:

  • 大文件上传困难:没有分片上传、断点续传,网络一中断就得重新开始
  • 存储平台绑定:绑死单一云存储,切换成本高,迁移困难
  • 预览能力弱:只支持少数格式,Office/图片/PDF 预览要额外配置
  • 权限管理粗糙:缺少细粒度权限控制,无法满足企业安全要求
  • 部署复杂:依赖多、配置繁琐,开箱即用困难

Free-FS 用主流技术栈做了一个功能完整、架构清晰、可扩展的文件管理后端。

核心功能

文件管理

支持列表和网格两种视图。

大文件上传与秒传

前端把大文件切片并行上传,后端通过 SSE 实时推进度,精确到每个分片的状态。网络中断后,系统记录断点位置,续传时从断点继续。

秒传的原理是先算文件 MD5 发给服务端,服务器有相同哈希的文件就直接建立引用,跳过数据传输。所以上传几个 G 的文件有时能"秒完"。

多云存储插件化

存储层用 SPI 插件化设计,把存储能力抽象成统一接口。

内置的存储实现有本地存储、阿里云 OSS、七牛云 Kodo、AWS S3 兼容存储、RustFS。

一套系统可以管理多个存储平台,按需分配或一键切换。新增存储平台只要实现核心接口并注册,不用改主业务代码。

添加存储配置

在线预览

支持五大类文件预览:

类型 支持格式
图片 jpg/png/gif/webp/svg 等
Office 文档 doc/docx/xls/xlsx/ppt/pptx(需要 LibreOffice)
文本代码 30+ 种编程语言语法高亮
音视频 流式播放
压缩包 查看目录结构

Office 文档通过 LibreOffice 转成 PDF 后交给前端,转换用进程池模式,可以配置并发度和超时。

权限与安全

用 Sa-Token 做权限认证,JWT 无状态会话,支持分布式部署。

权限可以控制到文件的查看、下载、编辑、删除等操作。

文件分享和回收站

文件分享有公开链接和授权码两种模式,授权码分享能设置有效期和访问次数。

回收站给删除操作一个缓冲区,支持批量还原、永久删除和自动清理。

回收站

安装与快速上手

环境要求

  • JDK 17+
  • Maven 3.8+
  • MySQL 8.0+ 或 PostgreSQL 14+(二选一)
  • Redis
  • LibreOffice (可选,用于 Office 文档预览功能)

安装步骤

bash 复制代码
git clone https://gitee.com/dromara/free-fs.git
cd free-fs
mvn clean install -DskipTests

数据库初始化

MySQL:

sql 复制代码
CREATE DATABASE `free-fs` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci';

PostgreSQL:

ini 复制代码
CREATE DATABASE free-fs ENCODING 'UTF8' LC_COLLATE='zh_CN.UTF-8' LC_CTYPE='zh_CN.UTF-8';

数据库创建完成之后,导入项目根目录下对应的 SQL 文件到刚创建的数据库中:

  • MySQL: _sql/mysql/free-fs.sql
  • PostgreSQL: _sql/postgresql/free-fs_pg.sql

配置与运行

修改 fs-admin/src/main/resources/application-dev.yml 中的数据库和 Redis 配置:

arduino 复制代码
cd fs-admin
mvn spring-boot:run

访问地址:

《SpringAI 智能面试平台+RAG 知识库》配套实战项目教程正在更新,涉及到 Prompt Engineering、大模型集成、RAG(检索增强生成)、高性能对象存储与向量数据库。后续的话,还会同步上Agent 项目。

内容非常全面,非常适合想要实战 AI 项目或者准备 AI 大模型应用开发岗位面试的朋友,来一张刚写完的3.4w 字+35 道题目 的 RAG 面试题总结,大家感受一下(点此链接了解: 星球):

技术架构

技术栈选型

后端用 Spring Boot 3.5.4,搭配 MyBatis Flex 做 ORM 层。

MyBatis Flex 是 MyBatis 的增强版,和 MyBatis-Plus 有些差异:

MyBatis Flex 的详细介绍可以参考这篇文章:再见 MyBatis,这款 ORM 框架确实太优雅!!

认证授权用 Sa-Token,比 Spring Security 简洁。数据库支持 MySQL 8.0+ 和 PostgreSQL 14+,HikariCP 连接池,配合 Caffeine 本地缓存和 Redis 分布式缓存。

项目结构

多模块 Maven 结构:

存储插件用 SPI 设计,storage-plugin-core 定义接口,各存储实现添加新插件模块就行。

与其他方案对比

对比维度 Free-FS MinIO Nextcloud Seafile
技术栈 Spring Boot 3.x Go PHP Go/C
定位 后端服务 对象存储 完整网盘 完整网盘
大文件上传 分片/断点续传/秒传 需自行实现 支持 支持
在线预览 多格式支持 需自行实现 支持 支持
多云存储 插件化切换 单一 支持 支持
权限管理 Sa-Token 细粒度 简单 细粒度 细粒度
部署难度 中(需数据库)
开源协议 Apache 2.0 AGPL v3 AGPL v3 GPL-3.0

只做对象存储的话 MinIO 更合适;需要完整网盘 UI 和协作功能的话 Nextcloud 或 Seafile 更好;需要一个可定制、易集成的文件管理后端,Free-FS 可以考虑。

总结

Free-FS 用 Spring Boot 3.x + MyBatis Flex + Sa-Token 做了一个功能完整的企业级文件管理后端。

  • 优势:功能完整,开箱即用;大文件上传(分片/断点续传/秒传);插件化存储扩展;多格式在线预览;Sa-Token 权限管理;Apache 2.0 协议友好。
  • 局限:需要部署数据库(MySQL/PostgreSQL + Redis);Office 预览要配置 LibreOffice。
  • 适用场景:搭建企业级文件管理系统、需要多云存储支持、需要大文件上传能力。

建议先部署基础版本跑通上传下载流程,再按需要接入云存储和配置预览。

⭐️推荐:

相关推荐
zopple1 天前
常见的 Spring 项目目录结构
java·后端·spring
cjy0001111 天前
springboot的 nacos 配置获取不到导致启动失败及日志不输出问题
java·spring boot·后端
小江的记录本1 天前
【事务】Spring Framework核心——事务管理:ACID特性、隔离级别、传播行为、@Transactional底层原理、失效场景
java·数据库·分布式·后端·sql·spring·面试
sheji34161 天前
【开题答辩全过程】以 基于springboot的校园失物招领系统为例,包含答辩的问题和答案
java·spring boot·后端
程序员cxuan1 天前
人麻了,谁把我 ssh 干没了
人工智能·后端·程序员
wuyikeer1 天前
Spring Framework 中文官方文档
java·后端·spring
Victor3561 天前
MongoDB(61)如何避免大文档带来的性能问题?
后端
Victor3561 天前
MongoDB(62)如何避免锁定问题?
后端
wuyikeer1 天前
Spring BOOT 启动参数
java·spring boot·后端
子木HAPPY阳VIP1 天前
Ubuntu 22.04 VMware 设置固定IP配置
人工智能·后端·目标检测·机器学习·目标跟踪