SpringBoot + minio + kkfile 实现文件预览

打印 上一主题 下一主题

主题 813|帖子 813|积分 2443

1、容器安装kkfileviewer

1.1 下载文件

这里以kkfile 4.4.0-beta版本为例
下载kkfile安装包及Dockerfile:
   https://codeup.aliyun.com/6254dee9a923b68581caaf50/kkfileviewer.git
  1.2、构建镜像

  1. git clone https://codeup.aliyun.com/6254dee9a923b68581caaf50/kkfileviewer.git
  2. cd kkfileviewer
  3. docker build -t kkfileview:v4.4.0 .
复制代码
1.3、 启动kkfileviewer

  1. 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添加依靠

  1. <dependency>
  2.     <groupId>io.minio</groupId>
  3.     <artifactId>minio</artifactId>
  4.     <version>8.5.11</version>
  5. </dependency>
复制代码
2.2、 设置

  1. # minio 文件存储配置信息
  2. minio:
  3.   endpoint: http://xxxxx:9000
  4.   accessKey: xxxx
  5.   secretKey: xxxxx
  6.   bucketName: test
复制代码
2.3、minio设置类

  1. package com.sunny.config;
  2. import io.minio.MinioClient;
  3. import org.springframework.beans.factory.annotation.Value;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. @Configuration
  7. public class MinioConfig {
  8.     @Value("${minio.endpoint}")
  9.     private String endPoint;
  10.     @Value("${minio.accessKey}")
  11.     private String accessKey;
  12.     @Value("${minio.secretKey}")
  13.     private String secretKey;
  14.     @Value("${minio.bucketName}")
  15.     private String bucketName;
  16.     @Bean
  17.     protected MinioClient minioClient(){
  18.         return MinioClient.builder()
  19.                 .endpoint(endPoint)
  20.                 .credentials(accessKey, secretKey)
  21.                 .build();
  22.     }
  23. }
复制代码
2.4、 minio工具类

  1. package com.sunny.utils;
  2. import com.sunny.entity.common.ApiResult;
  3. import com.sunny.exception.AppException;
  4. import io.minio.GetPresignedObjectUrlArgs;
  5. import io.minio.MinioClient;
  6. import io.minio.PutObjectArgs;
  7. import io.minio.http.Method;
  8. import jakarta.annotation.Resource;
  9. import org.springframework.beans.factory.annotation.Value;
  10. import org.springframework.stereotype.Component;
  11. import org.springframework.web.multipart.MultipartFile;
  12. import java.io.InputStream;
  13. @Component
  14. public class MinioUtils {
  15.     @Value("${minio.bucketName}")
  16.     private String bucketName;
  17.     @Resource
  18.     private MinioClient minioClient;
  19.     public ApiResult uploadFile(MultipartFile file) throws AppException {
  20.         String fileName = System.currentTimeMillis() + file.getOriginalFilename();
  21.         try (InputStream fi = file.getInputStream()) {
  22.             PutObjectArgs putObjectArgs = PutObjectArgs.builder().bucket(bucketName).contentType(file.getContentType()).object(fileName).stream(fi, fi.available(), -1).build();
  23.             minioClient.putObject(putObjectArgs);
  24.         } catch (Exception e) {
  25.             throw new AppException("文件上传失败" + e.getMessage());
  26.         }
  27.         return ApiResult.ok(fileName);
  28.     }
  29.     public ApiResult getPreviewUrl(String objectName) throws AppException {
  30.         try {
  31.             GetPresignedObjectUrlArgs urlArgs = GetPresignedObjectUrlArgs.builder().bucket(bucketName).object(objectName).method(Method.GET).build();
  32.             return ApiResult.ok(minioClient.getPresignedObjectUrl(urlArgs));
  33.         } catch (Exception e) {
  34.             throw new AppException("获取预览链接失败" + e.getMessage());
  35.         }
  36.     }
  37. }
复制代码
2.5、接口

  1. package com.sunny.controller;
  2. import com.sunny.entity.common.ApiResult;
  3. import com.sunny.exception.AppException;
  4. import com.sunny.utils.MinioUtils;
  5. import jakarta.annotation.Resource;
  6. import org.springframework.web.bind.annotation.GetMapping;
  7. import org.springframework.web.bind.annotation.PostMapping;
  8. import org.springframework.web.bind.annotation.RequestMapping;
  9. import org.springframework.web.bind.annotation.RestController;
  10. import org.springframework.web.multipart.MultipartFile;
  11. @RestController
  12. @RequestMapping("/file")
  13. public class FileOperationController {
  14.     @Resource
  15.     private MinioUtils minioUtils;
  16.     @PostMapping("/upload")
  17.     public ApiResult upload(MultipartFile file) throws AppException {
  18.         return minioUtils.uploadFile(file);
  19.     }
  20.     @GetMapping("/getPreviewUrl")
  21.     public ApiResult getPreviewUrl(String fileName) throws AppException {
  22.         return minioUtils.getPreviewUrl(fileName);
  23.     }
  24. }
复制代码
3、测试

3.1、上传文件



3.2、获取minio文件预览地址

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


3.3、文件预览

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



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

东湖之滨

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表