Spring Boot 集成 MinIO 与 KKFile 实现文件预览功能

简介: 本文详细介绍如何在Spring Boot项目中集成MinIO对象存储系统与KKFileView文件预览工具,实现文件上传及在线预览功能。首先搭建MinIO服务器,并在Spring Boot中配置MinIO SDK进行文件管理;接着通过KKFileView提供文件预览服务,最终实现文档管理系统的高效文件处理能力。

在现代的 Web 应用中,文件预览功能是提升用户体验的重要部分,尤其是在文档管理系统中。本文将带你逐步实现如何在 Spring Boot 项目中集成 MinIO(一个对象存储系统)与 KKFileView(一个开源文件预览工具),以实现对各种类型文件的在线预览。

项目准备

在开始之前,请确保你已经安装和配置好了以下工具:

  • Java 11+
  • Spring Boot
  • MinIO 服务器
  • KKFileView

第一步:搭建 MinIO 服务器

首先,我们需要配置 MinIO 作为对象存储服务器。你可以在本地或服务器上运行 MinIO。

  1. 下载 MinIO
    MinIO 官方网站 下载适用于你操作系统的版本。
  2. 运行 MinIO 服务器在安装完 MinIO 后,可以使用以下命令启动 MinIO:

minio server /data --console-address ":9001"
  1. /data 是存储文件的路径,9001 是 MinIO 控制台的端口。
  2. 访问 MinIO 控制台通过浏览器访问 http://localhost:9001,并使用默认的 access key 和 secret key 登录。你可以在 MinIO 控制台中创建一个 bucket 用来存储文件。

第二步:集成 Spring Boot 与 MinIO

在 Spring Boot 项目中,我们将使用 MinIO SDK 来上传和下载文件。

1. 添加依赖在 pom.xml 中添加 MinIO SDK 的依赖:

<dependency>    
  <groupId>io.minio</groupId>    
  <artifactId>minio</artifactId>    
  <version>8.0.3</version>
</dependency>

2. 配置 MinIO在 application.properties 中添加 MinIO 的配置信息:

 minio.endpoint=http://localhost:9000
 minio.accessKey=minioadmin
 minio.secretKey=minioadmin
 minio.bucketName=files

3. 创建 MinIO Service编写一个 MinIOService 类,用于文件的上传和下载:

@Service
public class MinioService {
    @Value("${minio.endpoint}")    
    private String minioEndpoint;    
    @Value("${minio.accessKey}")    
    private String minioAccessKey;    
    @Value("${minio.secretKey}")    
    private String minioSecretKey;    
    @Value("${minio.bucketName}")    
    private String bucketName;
    
    private MinioClient minioClient;
    @PostConstruct
    public void init() {        
    minioClient = MinioClient.builder()            
        .endpoint(minioEndpoint)            
        .credentials(minioAccessKey, minioSecretKey)            
        .build();    
    }
    public String uploadFile(MultipartFile file) throws Exception {
         String fileName = System.currentTimeMillis() + "-" + file.getOriginalFilename();
         minioClient.putObject(
            PutObjectArgs.builder()
            .bucket(bucketName)
            .object(fileName)
            .stream(file.getInputStream(), file.getSize(), -1)
            .contentType(file.getContentType())
            .build()
    );
    return fileName;
}
public String getFileUrl(String fileName) {
        return minioClient.getPresignedObjectUrl(
        GetPresignedObjectUrlArgs.builder()
        .bucket(bucketName)
        .object(fileName)
        .build()
        );
    }
}

第三步:集成 KKFileView 实现文件预览

KKFileView 支持多种格式的文件预览,例如 PDF、Word、Excel 等。

  1. 下载并运行 KKFileViewKKFileView 官方仓库 下载源码或使用 Docker 安装:
docker run -d -p 8012:8012 --name kkfileview keking/kkfileview

2. 配置 KKFileView 服务KKFileView 提供了一个 REST API,用于文件预览。我们可以将文件的 URL 传递给 KKFileView,实现在线预览。

在 application.properties 中配置 KKFileView 服务的地址:

kkfileview.server=http://localhost:8012

3. 实现预览接口在 MinioService 中创建一个方法,用于生成文件的预览 URL:

public String getPreviewUrl(String fileName) {
    String fileUrl = getFileUrl(fileName);
    return kkFileViewServer + "/onlinePreview?url=" + URLEncoder.encode(fileUrl, StandardCharsets.UTF_8);
}

4.Controller 实现文件上传和预览创建一个 FileController,实现文件上传和预览的接口:

@RestController
@RequestMapping("/files")
public class FileController {
    @Autowired
    private MinioService minioService;
    @PostMapping("/upload")
    public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) {
        try {
            String fileName = minioService.uploadFile(file);
            return ResponseEntity.ok(fileName);
        } catch (Exception e) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());
        }
    }
    @GetMapping("/preview/{fileName}")
    public ResponseEntity<String> previewFile(@PathVariable String fileName) {
        String previewUrl = minioService.getPreviewUrl(fileName);
        return ResponseEntity.ok(previewUrl);
    }
}


第四步:测试文件上传与预览

  1. 文件上传
    使用 Postman 或前端页面上传文件,访问 /files/upload 接口。
  2. 文件预览
    访问 /files/preview/{fileName},即可获取文件的预览链接,打开后即可在浏览器中预览文件。

总结

通过本文的介绍,你已经成功地集成了 MinIO 作为文件存储系统,并结合 KKFileView 实现了文件的在线预览功能。这种组合非常适合文档管理系统和需要处理大量文件的企业级应用。你可以根据需要对 MinIO 和 KKFileView 进行进一步的优化和扩展。

相关文章
|
19天前
|
XML Java API
Spring Boot集成MinIO
本文介绍了如何在Spring Boot项目中集成MinIO,一个高性能的分布式对象存储服务。主要步骤包括:引入MinIO依赖、配置MinIO属性、创建MinIO配置类和服务类、使用服务类实现文件上传和下载功能,以及运行应用进行测试。通过这些步骤,可以轻松地在项目中使用MinIO的对象存储功能。
|
21天前
|
消息中间件 Java Kafka
什么是Apache Kafka?如何将其与Spring Boot集成?
什么是Apache Kafka?如何将其与Spring Boot集成?
53 5
|
24天前
|
消息中间件 Java Kafka
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
36 1
|
25天前
|
缓存 资源调度 JavaScript
Vue集成Excalidraw实现在线画板功能
Excalidraw是一款开源在线绘图工具,适用于白板、思维导图、原型设计等场景。支持手绘风格、多种图形元素、导出功能及多人协作,深受开发者喜爱。本文档介绍了如何在Vue项目中集成Excalidraw,包括安装依赖、配置文件修改、页面添加等步骤,帮助开发者快速上手。
115 0
Vue集成Excalidraw实现在线画板功能
|
28天前
|
传感器 前端开发 Android开发
在 Flutter 开发中,插件开发与集成至关重要,它能扩展应用功能,满足复杂业务需求
在 Flutter 开发中,插件开发与集成至关重要,它能扩展应用功能,满足复杂业务需求。本文深入探讨了插件开发的基本概念、流程、集成方法、常见类型及开发实例,如相机插件的开发步骤,同时强调了版本兼容性、性能优化等注意事项,并展望了插件开发的未来趋势。
39 2
|
1月前
|
SQL 开发框架 .NET
突破T-SQL限制:利用CLR集成扩展RDS SQL Server的功能边界
CLR集成为SQL Server提供了强大的扩展能力,突破了T-SQL的限制,极大地拓展了SQL 的应用场景,如:复杂字符串处理、高性能计算、图像处理、机器学习集成、自定义加密解密等,使开发人员能够利用 .NET Framework的丰富功能来处理复杂的数据库任务。
|
1月前
|
网络协议 Java
springboot配置hosts文件
springboot配置hosts文件
46 11
|
24天前
|
消息中间件 监控 Java
您是否已集成 Spring Boot 与 ActiveMQ?
您是否已集成 Spring Boot 与 ActiveMQ?
47 0
|
2月前
|
Java Maven Docker
gitlab-ci 集成 k3s 部署spring boot 应用
gitlab-ci 集成 k3s 部署spring boot 应用
|
5月前
|
监控 druid Java
spring boot 集成配置阿里 Druid监控配置
spring boot 集成配置阿里 Druid监控配置
316 6
下一篇
DataWorks