Spring Boot 3.0 + MySQL 8.0 + kkFileView 实现完整文件服务
背景:比较常见的需求,做成公共的服务,后期维护比较简单,可扩展多个存储介质,上传逻辑简单,上传后提供一个文件id,后期可直接通过此id获取到文件,提供下载和预览(三方框架kkFileView),一站式解决,堪称完美。
设计思路:文件上传成功后提供文件ID,文件表记录文件信息,存储路径等,后续操作需提交文件ID。
- 文件上传
- 文件下载
- 文件预览(提供下载 url 至 kkFileView 即可)
建立数据表
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='系统附件表';
上传路径等配置
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={}
定义操作类
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 'http://127.0.01:9091/file_server/upload' \
--form 'file=@"/C:/Users/user/Desktop/恐龙头像.png"'
文件下载
直接访问 downloadUrl 即可,fullfilename 参数可忽略,是为了兼容 kkFileView (提供文件类型判断)
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