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

相关文章
|
2月前
|
测试技术 数据处理 调度
Dataphin功能Tips系列(57)「预览」vs「运行」:离线集成的神奇按钮
在数据开发过程中,使用Dataphin处理离线集成任务时,可能遇到数据过滤和字段计算组件配置正确性的验证问题。通过「预览」功能,可快速验证处理逻辑而不影响目标表;对于需要调度的任务,担心资源占用和耗时超出预期时,可使用「运行」功能进行全流程测试,评估实际耗时与资源消耗。「预览」适合逻辑验证,「运行」用于真实环境模拟,两者结合助力高效开发与调试。
|
2月前
|
SQL Java 关系型数据库
Dataphin功能Tips系列(53)-离线集成任务如何合理配置JVM资源
本文探讨了将MySQL数据同步至Hive时出现OOM问题的解决方案。
|
4月前
|
安全 Java Apache
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 身份和权限认证
本文介绍了 Apache Shiro 的身份认证与权限认证机制。在身份认证部分,分析了 Shiro 的认证流程,包括应用程序调用 `Subject.login(token)` 方法、SecurityManager 接管认证以及通过 Realm 进行具体的安全验证。权限认证部分阐述了权限(permission)、角色(role)和用户(user)三者的关系,其中用户可拥有多个角色,角色则对应不同的权限组合,例如普通用户仅能查看或添加信息,而管理员可执行所有操作。
150 0
|
4月前
|
安全 Java 数据安全/隐私保护
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 三大核心组件
本课程介绍如何在Spring Boot中集成Shiro框架,主要讲解Shiro的认证与授权功能。Shiro是一个简单易用的Java安全框架,用于认证、授权、加密和会话管理等。其核心组件包括Subject(认证主体)、SecurityManager(安全管理员)和Realm(域)。Subject负责身份认证,包含Principals(身份)和Credentials(凭证);SecurityManager是架构核心,协调内部组件运作;Realm则是连接Shiro与应用数据的桥梁,用于访问用户账户及权限信息。通过学习,您将掌握Shiro的基本原理及其在项目中的应用。
150 0
|
2月前
|
传感器 供应链 物联网
农业单亩价值创造功能技术集成的概念与内涵
农业单亩价值创造的技术集成,通过系统性创新打破传统单一模式,融合现代科技与生态理念,提升资源效率、经济效益和生态价值。其核心在于技术协同,实现精准农业、智能装备和生物强化等多维联动,推动经济、生态和社会价值统一。同时,注重资源集约化与循环化利用,延伸产业链并升级价值链,从短期高产转向长期可持续发展。政策与制度创新支撑技术普惠,未来需因地制宜解决技术适配性和成本收益平衡问题,重塑农业评价体系,实现高质量发展。
|
2月前
|
存储 分布式计算 供应链
Dataphin功能Tips系列(51)-支持增全量一体实时集成
本文介绍了基于增全量一体实时集成的库存管理与分析解决方案。通过将业务中台的库存表同步至MaxCompute Delta表,实现离线与实时分析的统一支持。相比传统方案,该方法确保数据一致性,优化存储成本,降低维护复杂度,并大幅提升实时性,满足高效库存管理需求。
|
2月前
|
资源调度 安全 数据安全/隐私保护
Cyber Triage 3.14 发布,带来全新用户界面、Hayabusa 集成、基线设定等功能
Cyber Triage 3.14 发布,带来全新用户界面、Hayabusa 集成、基线设定等功能
39 0
Cyber Triage 3.14 发布,带来全新用户界面、Hayabusa 集成、基线设定等功能
|
3月前
|
Java 开发工具 Spring
【Azure Application Insights】为Spring Boot应用集成Application Insight SDK
本文以Java Spring Boot项目为例,详细说明如何集成Azure Application Insights SDK以收集和展示日志。内容包括三步配置:1) 在`pom.xml`中添加依赖项`applicationinsights-runtime-attach`和`applicationinsights-core`;2) 在main函数中调用`ApplicationInsights.attach()`;3) 配置`applicationinsights.json`文件。同时提供问题排查建议及自定义日志方法示例,帮助用户顺利集成并使用Application Insights服务。
|
2月前
|
存储 Java Linux
SpringBoot × MinIO 极速开发指南:对象存储服务高可用实战
生成临时访问URL接口和文件预览其实是同一个方法,只是文件预览内定了七天访问,而这个方法可以自行制定,单位是秒。方法,所以返回的是地址信息,但是可以通过dubug看到Bucket中的属性,确实是当前所有桶信息。配置类中奖MinIOClient客户端注入到Springboot中。MinIO集群的在Linux上的部署可以参考:​​​​​​​。Nginx代理MinIO集群可以参考:​​​​​​​。从Bucket源码可以看出,并没有实现。
197 0
|
3月前
|
缓存 前端开发 API
(网页系统集成CAD功能)在线CAD中配置属性的使用教程
本文介绍了Mxcad SDK在线预览和编辑CAD图纸的功能及配置方法。通过Vite、CDN或Webpack实现集成,用户可自定义设置以满足项目需求。主要内容包括:1)`createMxCad()`方法的初始属性配置,如画布ID、WASM文件路径、字体加载路径等;2)`MxFun.setIniset()`方法提供的更多CAD初始配置;3)`McObject`对象API用于动态调整视图背景色、浏览模式等。此外,还提供了在线Demo(https://demo2.mxdraw3d.com:3000/mxcad/)供用户测试实时效果。