SpringBoot + minio + kkfile 实现文件预览

科技   2024-11-25 11:34   山西  

作者:小太阳381
链接:https://juejin.cn/post/7407384172049891379


1、容器安装kkfileviewer


1.1 下载文件

这里以kkfile 4.4.0-beta版本为例


下载kkfile安装包及Dockerfile:

https://codeup.aliyun.com/6254dee9a923b68581caaf50/kkfileviewer.git


1.2、构建镜像

git clone https://codeup.aliyun.com/6254dee9a923b68581caaf50/kkfileviewer.gitcd kkfileviewerdocker build -t kkfileview:v4.4.0 .


1.3、 启动kkfileviewer

docker run -d -p 8012:8012 --name kkfileview kkfileview:v4.4.0


1.4、 访问测试


http://you-ip:8012



2、springboot集成minio


2.1 pom.xml添加依赖

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


2.2、 配置

# minio 文件存储配置信息minio: endpoint: http://xxxxx:9000 accessKey: xxxx secretKey: xxxxx bucketName: test


2.3、minio配置类

package com.sunny.config;
import io.minio.MinioClient;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;
@Configurationpublic class MinioConfig {
@Value("${minio.endpoint}") private String endPoint;
@Value("${minio.accessKey}") private String accessKey;
@Value("${minio.secretKey}") private String secretKey;
@Value("${minio.bucketName}") private String bucketName;

@Bean protected MinioClient minioClient(){ return MinioClient.builder() .endpoint(endPoint) .credentials(accessKey, secretKey) .build(); }}


2.4、 minio工具类

package com.sunny.utils;
import com.sunny.entity.common.ApiResult;import com.sunny.exception.AppException;import io.minio.GetPresignedObjectUrlArgs;import io.minio.MinioClient;import io.minio.PutObjectArgs;import io.minio.http.Method;import jakarta.annotation.Resource;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Component;import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
@Componentpublic class MinioUtils {
@Value("${minio.bucketName}") private String bucketName;
@Resource private MinioClient minioClient;
public ApiResult uploadFile(MultipartFile file) throws AppException { String fileName = System.currentTimeMillis() + file.getOriginalFilename(); try (InputStream fi = file.getInputStream()) { PutObjectArgs putObjectArgs = PutObjectArgs.builder().bucket(bucketName).contentType(file.getContentType()).object(fileName).stream(fi, fi.available(), -1).build(); minioClient.putObject(putObjectArgs); } catch (Exception e) { throw new AppException("文件上传失败" + e.getMessage()); } return ApiResult.ok(fileName); }
public ApiResult getPreviewUrl(String objectName) throws AppException { try { GetPresignedObjectUrlArgs urlArgs = GetPresignedObjectUrlArgs.builder().bucket(bucketName).object(objectName).method(Method.GET).build(); return ApiResult.ok(minioClient.getPresignedObjectUrl(urlArgs)); } catch (Exception e) { throw new AppException("获取预览链接失败" + e.getMessage()); } }}


2.5、接口

package com.sunny.controller;
import com.sunny.entity.common.ApiResult;import com.sunny.exception.AppException;import com.sunny.utils.MinioUtils;import jakarta.annotation.Resource;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.multipart.MultipartFile;
@RestController@RequestMapping("/file")public class FileOperationController {
@Resource private MinioUtils minioUtils;
@PostMapping("/upload") public ApiResult upload(MultipartFile file) throws AppException { return minioUtils.uploadFile(file); }
@GetMapping("/getPreviewUrl") public ApiResult getPreviewUrl(String fileName) throws AppException { return minioUtils.getPreviewUrl(fileName); }}


3、测试


3.1、上传文件



3.2、获取minio文件预览地址


3.1中返回一个文件名,该文件名为上传文件在minio中的唯一名称,使用该名称请求minio文件预览地址



3.3、文件预览


3.2中的接口返回一个地址,将地址放到kkfileviewer文件预览服务中,可以预览文件



对编程、职场感兴趣的同学,可以链接我,微信:coder301 拉你进入“程序员交流群”。
🔥东哥私藏精品 热门推荐🔥

东哥作为一名超级老码农,整理了全网最全《Java高级架构师资料合集》

资料包含了《IDEA视频教程》《最全Java面试题库》、最全项目实战源码及视频》及《毕业设计系统源码》总量高达 650GB 。全部免费领取!全面满足各个阶段程序员的学习需求。

Java面试那些事儿
回复 java ,领取Java面试题。分享AI编程,Java教程,Java面试辅导,Java编程视频,Java下载,Java技术栈,AI工具,Java开源项目,Java简历模板,Java招聘,Java实战,Java面试经验,IDEA教程。
 最新文章