SpringBoot整合MinIO

x33g5p2x  于2021-12-11 转载在 Spring  
字(4.1k)|赞(0)|评价(0)|浏览(329)

我们先来看下MinIO的官网简介

官网地址https://docs.min.io/

字面意思 MinIO是一个文件存储服务 支持分布式,以及可搭建集群,单体项目所以不考虑集群,下面我们来安装它,我所在的环境为Linux

1.https://dl.min.io/server/minio/release/linux-amd64/minio
2.chmod +x minio
3./minio server /data

这是启动好的样子,然后我们在浏览器里访问

让你填写AK和SK,把刚刚打印在控制台上的输入即可,如果想要修改的话通过以下方式可修改

export MINIO_ACCESS_KEY=AK
export MINIO_ACCESS_KEY=SK

登录成功后在页面右下角点击创建桶,也就是我们的文件夹

创建好后我们就直接可以来上传了,但我们的目前是在SpringBoot程序当中进行上传下载

首先我们来添加依赖

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

由于项目的原因我并没有把信息配置在YAML里面,可自行根据自己场景配置

import io.minio.MinioClient;
import io.minio.PutObjectOptions;
import io.minio.messages.Bucket;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.kzwl.comm.advice.Consts;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;
import java.util.List;

/** * Minio工具类 */
@Slf4j
public  class MinIoUtil {

    public static MinioClient minioClient;

    /** * 初始化minio配置 * */  @PostConstruct
    public static void init() {
        try {
            log.info("Minio Initialize........................");

            minioClient = MinioClient.builder().endpoint(Consts.Minio.Url).credentials(Consts.Minio.AccessKey,Consts.Minio.SecretKey).build();
            createBucket(Consts.Minio.BucketName);
            log.info("Minio Initialize........................successful");
        } catch (Exception e) {
            e.printStackTrace();
            log.error("初始化minio配置异常: 【{}】", e.fillInStackTrace());
        }
    }

    /** * 判断 bucket是否存在 * * @param bucketName: * 桶名 * @return: boolean */
    @SneakyThrows(Exception.class)
    public static boolean bucketExists(String bucketName) {
        return minioClient.bucketExists(bucketName);
    }

    /** * 创建 bucket * * @param bucketName: * 桶名 * @return: void */
    @SneakyThrows(Exception.class)
    public static void createBucket(String bucketName) {
        boolean isExist = minioClient.bucketExists(bucketName);
        if (!isExist) {
            minioClient.makeBucket(bucketName);
        }
    }

    /** * 获取全部bucket * * @param : * @return: java.util.List<io.minio.messages.Bucket> */
    @SneakyThrows(Exception.class)
    public static List<Bucket> getAllBuckets() {
        return minioClient.listBuckets();
    }

    /** * 文件上传 * * @param bucketName: * 桶名 * @param fileName: * 文件名 * @param filePath: * 文件路径 * @return: void */
    @SneakyThrows(Exception.class)
    public static void upload(String bucketName, String fileName, String filePath) {
        minioClient.putObject(bucketName, fileName, filePath, null);
    }

    /** * 文件上传 * * @param bucketName: * 桶名 * @param fileName: * 文件名 * @param stream: * 文件流 * @return: java.lang.String : 文件url地址 */
    @SneakyThrows(Exception.class)
    public static String upload(String bucketName, String fileName, InputStream stream) {
        minioClient.putObject(bucketName, fileName, stream, new PutObjectOptions(stream.available(), -1));
        return getFileUrl(bucketName, fileName);
    }

    /** * 文件上传 * * @param bucketName: * 桶名 * @param file: * 文件 * @return: java.lang.String : 文件url地址 */
    @SneakyThrows(Exception.class)
    public static String upload(String bucketName, MultipartFile file) {
        final InputStream is = file.getInputStream();
        final String fileName = file.getOriginalFilename();
        minioClient.putObject(bucketName, fileName, is, new PutObjectOptions(is.available(), -1));
        is.close();
        return getFileUrl(bucketName, fileName);
    }

    /** * 删除文件 * * @param bucketName: * 桶名 * @param fileName: * 文件名 * @return: void */
    @SneakyThrows(Exception.class)
    public static void deleteFile(String bucketName, String fileName) {
        minioClient.removeObject(bucketName, fileName);
    }

    /** * 下载文件 * * @param bucketName: * 桶名 * @param fileName: * 文件名 * @param response: * @return: void */
// @SneakyThrows(Exception.class)
// public static void download(String bucketName, String fileName, HttpServletResponse response) {
// // 获取对象的元数据
// final ObjectStat stat = minioClient.statObject(bucketName, fileName);
// response.setContentType(stat.contentType());
// response.setCharacterEncoding("UTF-8");
// response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
// InputStream is = minioClient.getObject(bucketName, fileName);
// IOUtils.copy(is, response.getOutputStream());
// is.close();
// }

    /** * 获取minio文件的下载地址 * * @param bucketName: * 桶名 * @param fileName: * 文件名 * @return: java.lang.String * @date : 2020/8/16 22:07 */
    @SneakyThrows(Exception.class)
    public static String getFileUrl(String bucketName, String fileName) {
        return minioClient.presignedGetObject(bucketName, fileName);
    }

}

MinIO相对操作还是很简单,当然这是针对单机操作,如果并发量大的话,可考虑配置集群!

相关文章