0
点赞
收藏
分享

微信扫一扫

Java代码案例:在SpringBoot项目中结合MinIO和kkFile实现文件预览功能


要在SpringBoot项目中结合MinIO和kkFile实现文件预览功能,你可以按照以下步骤进行:

1. 容器安装kkFileViewer

首先,你需要下载并运行kkFileViewer,这是一个支持多种格式文件预览的服务。

  • 下载kkFile安装包及Dockerfile:https://codeup.aliyun.com/6254dee9a923b68581caaf50/kkfileviewer.git
  • 构建镜像并启动kkFileViewer:

git clone https://codeup.aliyun.com/6254dee9a923b68581caaf50/kkfileviewer.git
cd kkfileviewer
docker build -t kkfileview:v4.4.0 .
docker run -d -p 8012:8012 --name kkfileview kkfileview:v4.4.0

  • 访问测试:http://your-ip:8012

2. SpringBoot集成MinIO

  • 添加依赖:在pom.xml中添加MinIO的依赖。

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

  • 配置MinIO:在application.properties中添加MinIO的配置信息。

minio.endpoint=http://localhost:9000
minio.accessKey=minioadmin
minio.secretKey=minioadmin
minio.bucketName=files

  • MinIO配置类:创建一个配置类,用于创建MinIO客户端。

@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();
    }
}

  • MinIO工具类:创建一个工具类,用于文件的上传和获取预览URL。

@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());
        }
    }
}

  • 接口:创建一个控制器,用于处理文件上传和获取预览URL的请求。

@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. 测试

  • 上传文件:使用Postman或前端页面上传文件,访问/file/upload接口。
  • 获取MinIO文件预览地址:3.1中返回的文件名,使用该文件名请求MinIO文件预览地址。
  • 文件预览:3.2中的接口返回的地址,放到kkFileViewer文件预览服务中,可以预览文件。

举报

相关推荐

0 条评论