Spring Boot 3.0 + MySQL 8.0 + kkFileView 实现完整文件服务

Spring Boot 3.0 + MySQL 8.0 + kkFileView 实现完整文件服务

背景:比较常见的需求,做成公共的服务,后期维护比较简单,可扩展多个存储介质,上传逻辑简单,上传后提供一个文件id,后期可直接通过此id获取到文件,提供下载和预览(三方框架kkFileView),一站式解决,堪称完美。

设计思路:文件上传成功后提供文件ID,文件表记录文件信息,存储路径等,后续操作需提交文件ID。

  • 文件上传
  • 文件下载
  • 文件预览(提供下载 url 至 kkFileView 即可)

建立数据表

sql 复制代码
DROP TABLE IF EXISTS sys_file_info;
CREATE TABLE `sys_file_info` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
    `file_id` varchar(255) DEFAULT NULL COMMENT '文件id',
    `original_name` varchar(255) DEFAULT NULL COMMENT '文件原名',
    `upload_name` varchar(255) DEFAULT NULL COMMENT '文件名',
    `upload_path` varchar(255) DEFAULT NULL COMMENT '上传路径',
    `download_url` varchar(255) DEFAULT NULL COMMENT '下载url',
    `preview_url` varchar(255) DEFAULT NULL COMMENT '预览url',
    `upload_time` datetime DEFAULT NULL COMMENT '上传时间',
    `content_type` varchar(255) DEFAULT NULL COMMENT '文件类型',
    `suffix` varchar(255) DEFAULT NULL COMMENT '文件后缀',
    `size` bigint DEFAULT NULL COMMENT '文件大小',
    `download_count` int DEFAULT '0' COMMENT '下载次数',
    `create_by` varchar(255) DEFAULT NULL COMMENT '创建者',
    `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
    `update_by` varchar(255) DEFAULT NULL COMMENT '更新者',
    `update_time` timestamp NULL DEFAULT NULL COMMENT '更新时间',
    `deleted` tinyint DEFAULT '0' COMMENT '删除:0未删除,1已删除',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='系统附件表';

上传路径等配置

yml 复制代码
app:
  # 附件存储路径
  upload-attachments: /data/attachments/
  # api 文件下载 url
  file-download-url: ${app.host.web}/file_server/download/{}?fullfilename={}
  # kkFileView 文件预览 url
  file-preview-url: ${app.host.web}/preview/onlinePreview?url={}

定义操作类

java 复制代码
public interface ISysFileInfoService extends IService<SysFileInfo> {

    /**
     * 保存文件,默认删除原文件
     */
    FileInfoQueryVO saveFile(String srcPath);

    /**
     * 上传文件
     */
    FileInfoQueryVO uploadFile(MultipartFile file);

    /**
     * 删除文件
     */
    boolean deleteFile(String fileId);

    /**
     * 查询文件
     */
    FileInfoQueryVO queryFile(String fileId);

    /**
     * 下载次数 + 1
     */
    void incrementCount(String fileId);

}

文件上传

curl 复制代码
curl 'http://127.0.01:9091/file_server/upload' \
--form 'file=@"/C:/Users/user/Desktop/恐龙头像.png"'


文件下载

直接访问 downloadUrl 即可,fullfilename 参数可忽略,是为了兼容 kkFileView (提供文件类型判断)

curl 复制代码
http://127.0.0.1:9091/file_server/download/1864906203106402304?fullfilename=1864906203106402304.png

文件预览

前提:部署 kkFileView ,参考:https://blog.csdn.net/z1353095373/article/details/144290951

直接访问 previewUrl 即可

源码

https://gitee.com/zhaomingjian/workspace_jason_demo/tree/master/file-server-boot

相关推荐
邓草6 分钟前
phpStudy v8.1 离线版一键安装包(小皮面板)
运维·服务器·mysql
2301_767902647 分钟前
mysql语言
数据库·mysql·oracle
Java水解8 分钟前
Spring Boot 数据缓存与性能优化
spring boot·后端
她说..10 分钟前
Redis 中常用的操作方法
java·数据库·spring boot·redis·缓存
Kapaseker1 小时前
解析 Compose 的核心概念 remember
android·kotlin
北极糊的狐1 小时前
MySQL常见报错分析及解决方案总结(42)---ERROR 1142 (42000): SELECT command denied
java·mysql·adb·myeclipse
西柚小萌新1 小时前
【MySQL数据库】--借助AI快速画数据库ER图
数据库·mysql
V1ncent Chen1 小时前
从零学SQL 05 基础查询
数据库·sql·mysql·数据分析
肥猪猪爸1 小时前
数据库 2PC 极简流程图
java·数据库·分布式·mysql·分布式事务·2pc
秋知叶i1 小时前
【Android Studio】Kotlin 第一个 App Hello World 创建与运行|超详细入门
android·kotlin·android studio