专业的编程技术博客社区

网站首页 > 博客文章 正文

SpringBoot + minio + kkfile 实现文件预览

baijin 2024-12-14 10:29:23 博客文章 8 ℃ 0 评论

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.git

cd kkfileviewer

docker 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;




@Configuration

public 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;




@Component

public 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文件预览服务中,可以预览文件


Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表