zoukankan      html  css  js  c++  java
  • SpringBoot整合MinIO

    今天因为公司的需求接触到这个东西,我们先来看下MinIO的官网简介

    MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。

    字面意思 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>7.1.0</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配置
         *
         * @param :
         * @return: void
         * @date : 2020/8/16 20:56
         */
      @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相对操作还是很简单,当然这是针对单机操作,如果并发量大的话,可考虑配置集群!

    如有侵权请联系作者删除!

  • 相关阅读:
    几个生僻字:烎,囧、槑、玊、奣、嘦、勥、巭、嫑、恏、兲、氼、忈、炛
    移动互联网相关应用网站
    Android 布局简要范例
    参与了一次体验不好的产品体验
    ros6.44版本增加了测试出两台ROS之间的速度极限是多少
    mikrotik ros CVE-2019–3924 DUDE AGENT VULNERABILITY
    如何获取阿里云OSS上每个文件夹的大小
    USB-IF协会公布最新PD3.0(PPS)协议认证芯片和产品名单
    第一次有人把小米9快充讲的这么简单明了qc3.0 usb pd
    查看手机拍照性能排名以及电池排名的两个网站
  • 原文地址:https://www.cnblogs.com/zgwjava/p/13652164.html
Copyright © 2011-2022 走看看