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

相关推荐
xxjj998a11 分钟前
Laravel6.x核心特性全解析
数据库·mysql·adb
QQ1__8115175158 小时前
Spring boot名城小区物业管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
前端·vue.js·spring boot
yoyo_zzm9 小时前
Laravel9.x新特性全解析
数据库·mysql·nginx
yoyo_zzm13 小时前
Laravel6.x新特性全解析
java·spring boot·后端
源码宝13 小时前
基于 SpringBoot + Vue 的医院随访系统:技术架构与功能实现
java·vue.js·spring boot·架构·源码·随访系统·随访管理
饭小猿人14 小时前
Android 腾讯X5WebView如何禁止系统自带剪切板和自定义剪切板视图
android·java
_李小白14 小时前
【android opencv学习笔记】Day 8: remap(像素位置重映射)
android·opencv·学习
美狐美颜SDK开放平台14 小时前
多场景美颜SDK解决方案:直播APP(iOS/安卓)开发接入详解
android·人工智能·ios·音视频·美颜sdk·第三方美颜sdk·短视频美颜sdk
oldking呐呐15 小时前
MySQL从建库到删库跑路 -- 4.表的操作
后端·mysql
嗷o嗷o15 小时前
Android BLE 里,MTU、分包和长数据发送到底该怎么处理
android