SpringBoot+MinIO+KKFileView实现文件预览功能
在现代的 Web 应用中,文件上传和预览是常见的需求场景。尤其是在内容管理系统(CMS)或企业内部应用中,文件预览功能尤为重要。通过 Spring Boot 搭配 MinIO 和 KKFileView,我们可以轻松实现高效的文件存储和在线预览功能。
本文将从以下几个方面,带你逐步实现一个简单的文件预览系统。
一、项目背景和技术选型
- Spring Boot:主流的 Java 后端开发框架,用于快速构建 RESTful 服务。
- MinIO:一款高性能的对象存储服务,支持 S3 协议,适合大文件存储。
- KKFileView:一款轻量级文件在线预览服务,支持多种文件格式(如 Office 文档、PDF、图片等)。
系统架构图:
功能目标
用户上传文件到 MinIO。
后端通过 KKFileView 生成文件预览链接。
用户通过前端直接查看文件内容。
二、环境准备
1. MinIO 安装和启动
下载并运行 MinIO:
docker run -p 9000:9000 -p 9001:9001 \ --name minio \ -e "MINIO_ROOT_USER=minioadmin" \ -e "MINIO_ROOT_PASSWORD=minioadmin" \ quay.io/minio/minio server /data --console-address ":9001"
访问 MinIO 控制台:http://localhost:9001
默认账号密码:
- 用户名:minioadmin
- 密码:minioadmin
创建一个存储桶(如 preview-files)。
2. KKFileView 安装和启动
下载并运行 KKFileView:
docker run -d --name kkfileview \ -p 8012:8012 \ --restart=always \ kekingcn/kkfileview:latest
访问 KKFileView 服务:http://localhost:8012
三、项目代码实现
1. 引入依赖
在 pom.xml 文件中添加以下依赖:
<dependencies> <!-- Spring Boot Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- MinIO 客户端 --> <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.5.4</version> </dependency> <!-- Apache Commons IO --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> </dependency> </dependencies>
2. 配置文件
在 application.yml 中配置 MinIO 和 KKFileView 服务地址:
minio: endpoint: http://localhost:9000 accessKey: minioadmin secretKey: minioadmin bucketName: preview-files kkfileview: serverUrl: http://localhost:8012
3. MinIO 文件上传和预览服务
创建 MinioService 类:
import io.minio.*; import io.minio.errors.MinioException; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.InputStream; @Service public class MinioService { @Value("${minio.endpoint}") private String endpoint; @Value("${minio.accessKey}") private String accessKey; @Value("${minio.secretKey}") private String secretKey; @Value("${minio.bucketName}") private String bucketName; private MinioClient getClient() { return MinioClient.builder() .endpoint(endpoint) .credentials(accessKey, secretKey) .build(); } public String uploadFile(String fileName, InputStream inputStream, String contentType) throws Exception { MinioClient client = getClient(); client.putObject( PutObjectArgs.builder() .bucket(bucketName) .object(fileName) .stream(inputStream, -1, 10485760) .contentType(contentType) .build() ); return endpoint + "/" + bucketName + "/" + fileName; } }
4. KKFileView 服务对接
创建 FilePreviewService 类:
import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @Service public class FilePreviewService { @Value("${kkfileview.serverUrl}") private String kkFileViewServerUrl; public String generatePreviewUrl(String fileUrl) { return kkFileViewServerUrl + "/onlinePreview?url=" + fileUrl; } }
5. REST 控制器
创建 FileController 类:
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.InputStream; @RestController @RequestMapping("/files") public class FileController { @Autowired private MinioService minioService; @Autowired private FilePreviewService filePreviewService; @PostMapping("/upload") public String uploadFile(@RequestParam("file") MultipartFile file) { try (InputStream inputStream = file.getInputStream()) { String fileUrl = minioService.uploadFile(file.getOriginalFilename(), inputStream, file.getContentType()); return "上传成功,文件地址:" + fileUrl; } catch (Exception e) { e.printStackTrace(); return "上传失败:" + e.getMessage(); } } @GetMapping("/preview") public String previewFile(@RequestParam("fileUrl") String fileUrl) { return filePreviewService.generatePreviewUrl(fileUrl); } }
四、运行和测试
启动 Spring Boot 项目。
上传文件:
curl -F "file=@example.pdf" http://localhost:8080/files/upload
输出类似以下内容:
上传成功,文件地址:http://localhost:9000/preview-files/example.pdf
生成预览链接:
curl "http://localhost:8080/files/preview?fileUrl=http://localhost:9000/preview-files/example.pdf"
输出类似以下内容:
http://localhost:8012/onlinePreview?url=http://localhost:9000/preview-files/example.pdf
在浏览器中打开预览链接即可查看文件内容。
五、总结
通过 Spring Boot、MinIO 和 KKFileView 的结合,我们轻松实现了文件上传和在线预览功能。
- MinIO 提供了高效的对象存储服务。
- KKFileView 提供了强大的文档解析能力。
- Spring Boot 实现了两者的无缝对接。
这套方案轻量高效,适合企业内部文件管理系统,也可以轻松扩展至分布式环境。
到此这篇关于SpringBoot+MinIO+KKFileView实现文件预览功能的文章就介绍到这了,更多相关SpringBoot MinIO KKFileView文件预览内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SpringBoot整合Docker实现一次构建到处运行的操作方法
本文讲解的是 SpringBoot 引入容器化技术 Docker 实现一次构建到处运行,包括镜像构建、Docker仓库搭建使用、Docker仓库可视化UI等内容,需要的朋友可以参考下2022-10-10深入Spring Boot之ClassLoader的继承关系和影响
这篇文章主要介绍了深入Spring Boot之ClassLoader的继承关系和影响,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-06-06Spring Boot集成Mybatis的实例代码(简洁版)
这篇文章主要介绍了Spring Boot集成Mybatis简洁版的教程,需要的朋友可以参考下2018-02-02解决springboot jpa @Column columnDefinition等属性失效问题
这篇文章主要介绍了解决springboot jpa @Column columnDefinition等属性失效问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-10-10Pattern.compile函数提取字符串中指定的字符(推荐)
这篇文章主要介绍了Pattern.compile函数提取字符串中指定的字符,使用的是Java中的Pattern.compile函数来实现对指定字符串的截取,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-12-12IDEA报错"Cannot resolve symbol"问题的解决办法
早上来了,打开idea发现注解等都变红报错can’t resolvesymbol,由于这个错之前也报过,所以记录一下,这篇文章主要给大家介绍了关于IDEA报错"Cannot resolve symbol"问题的解决办法,需要的朋友可以参考下2023-11-11
最新评论