当前位置: 代码网 > it编程>编程语言>Java > SpringBoot+MinIO+KKFileView实现文件预览功能

SpringBoot+MinIO+KKFileView实现文件预览功能

2024年11月25日 Java 我要评论
在现代的 web 应用中,文件上传和预览是常见的需求场景。尤其是在内容管理系统(cms)或企业内部应用中,文件预览功能尤为重要。通过 spring boot 搭配 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文件预览内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com