springboot整合minio

詹学伟
詹学伟
发布于 2024-04-21 / 21 阅读
0
1

springboot整合minio

第一步:添加依赖

<!--minio依赖-->
<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>7.0.2</version>
</dependency>

第二步:配置文件

#Minio Config
minio:
  endpoint: http://192.168.110.101:9000
  accessKey: minio
  secretKey: minio123456
  bucketName: test

第三步:配置类

package com.example.demo.config;

import io.minio.MinioClient;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

@Component
@Slf4j
public class MinIoClientConfig {

    @Value("${minio.endpoint}")
    private String endpoint;

    @Value("${minio.accessKey}")
    private String accessKey;

    @Value("${minio.secretKey}")
    private String secretKey;

    @Bean
    public MinioClient minioClient() {
        log.info("endpoint={}  ,  accessKey={}  ,secretKey={}", endpoint, accessKey, secretKey);
        try {
            return new MinioClient(endpoint, accessKey, secretKey);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

第四步:接口

package com.example.demo.service;

import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;

public interface MinIOService {

    /**
     * 检查存储桶是否存在
     *
     * @param bucketName 存储桶名称
     * @return
     */
    boolean bucketExists(String bucketName);

    /**
     * 创建存储桶
     *
     * @param bucketName 存储桶名称
     */
    boolean makeBucket(String bucketName);

    /**
     * 上传文件
     *
     * @param file 上传文件
     * @return 成功则返回文件名,失败返回空
     */
    String uploadFile(MultipartFile file);

    /**
     * 下载文件
     *
     * @param objectName 文件路径
     */
    InputStream downloadFile(String objectName, HttpServletResponse response);

    /**
     * 删除文件
     *
     * @param objectName 文件路径
     * @return
     */
    boolean deleteFile(String objectName);

    /**
     * 得到指定文件的InputStream
     *
     * @param objectName 文件路径
     * @return
     */
    InputStream getObject(String objectName);

    /**
     * 根据文件路径得到预览文件绝对地址
     *
     * @param objectName 文件路径
     * @return
     */
    String getPreviewFileUrl(String objectName);
}

第五步:接口实现

package com.example.demo.service;

import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;

public interface MinIOService {

    /**
     * 检查存储桶是否存在
     *
     * @param bucketName 存储桶名称
     * @return
     */
    boolean bucketExists(String bucketName);

    /**
     * 创建存储桶
     *
     * @param bucketName 存储桶名称
     */
    boolean makeBucket(String bucketName);

    /**
     * 上传文件
     *
     * @param file 上传文件
     * @return 成功则返回文件名,失败返回空
     */
    String uploadFile(MultipartFile file);

    /**
     * 下载文件
     *
     * @param objectName 文件路径
     */
    InputStream downloadFile(String objectName, HttpServletResponse response);

    /**
     * 删除文件
     *
     * @param objectName 文件路径
     * @return
     */
    boolean deleteFile(String objectName);

    /**
     * 得到指定文件的InputStream
     *
     * @param objectName 文件路径
     * @return
     */
    InputStream getObject(String objectName);

    /**
     * 根据文件路径得到预览文件绝对地址
     *
     * @param objectName 文件路径
     * @return
     */
    String getPreviewFileUrl(String objectName);
}

第六步:控制层

package com.example.demo.controller;

import com.example.demo.common.ApiConst;
import com.example.demo.common.ApiResult;
import com.example.demo.service.MinIOService;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

@RestController
@RequestMapping(value = ApiConst.API_PREFIX + "minio")
@Slf4j
public class MinioController {


    @Autowired
    private MinIOService minIOService;


    @SneakyThrows
    @PostMapping("/upload")
    public ApiResult<String> uploadFile(@RequestParam("file") MultipartFile file) {
        String imgPath = minIOService.uploadFile(file);
        return ApiResult.success(imgPath);
    }

    @SneakyThrows
    @GetMapping("/preview")
    public ApiResult<String> preview(@RequestParam("objectName") String objectName) {
        String url = minIOService.getPreviewFileUrl(objectName);
        return ApiResult.success(url);
    }

}


评论