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 进行进一步的优化和扩展。

相关文章
|
4天前
|
Java Maven Docker
gitlab-ci 集成 k3s 部署spring boot 应用
gitlab-ci 集成 k3s 部署spring boot 应用
|
2天前
|
Java 数据安全/隐私保护 Spring
springboot实现邮箱发送(激活码)功能
本文介绍了如何在Spring Boot应用中配置和使用邮箱发送功能,包括开启邮箱的SMTP服务、添加Spring Boot邮件发送依赖、配置application.properties文件,以及编写邮件发送的代码实现。
16 2
springboot实现邮箱发送(激活码)功能
|
2天前
|
安全 Java Linux
springboot实现黑名单和白名单功能
这篇文章介绍了如何在Spring Boot中实现黑名单和白名单功能,通过创建一个自定义的过滤器类并注册到Spring Boot应用中,以控制基于IP地址的访问权限。
9 1
springboot实现黑名单和白名单功能
|
7天前
|
缓存 NoSQL Java
Springboot自定义注解+aop实现redis自动清除缓存功能
通过上述步骤,我们不仅实现了一个高度灵活的缓存管理机制,还保证了代码的整洁与可维护性。自定义注解与AOP的结合,让缓存清除逻辑与业务逻辑分离,便于未来的扩展和修改。这种设计模式非常适合需要频繁更新缓存的应用场景,大大提高了开发效率和系统的响应速度。
28 2
|
Java 应用服务中间件 Spring
Spring Boot的依赖配置文件的解析
Spring Boot的依赖配置文件的解析
112 0
|
Java Spring
Spring AOP源码:配置文件解析过程
Spring AOP源码:配置文件解析过程
66 0
java202304java学习笔记第六十一天-ssm-spring配置文件-新注解解析
java202304java学习笔记第六十一天-ssm-spring配置文件-新注解解析
62 0
java202304java学习笔记第六十一天-ssm-spring配置文件-新注解解析
java202304java学习笔记第六十一天-ssm-spring配置文件-新注解解析
46 0
java202304java学习笔记第六十一天-ssm-spring配置文件-springMvc注解解析
java202304java学习笔记第六十一天-ssm-spring配置文件-springMvc注解解析
45 0
|
Java Spring 容器
Spring中PropertySource属性源配置文件的优先级、顺序问题大解析(加载流程)【享学Spring】(中)
Spring中PropertySource属性源配置文件的优先级、顺序问题大解析(加载流程)【享学Spring】(中)
Spring中PropertySource属性源配置文件的优先级、顺序问题大解析(加载流程)【享学Spring】(中)

热门文章

最新文章