Minio的安装与使用

Minio的安装与使用

一、Minio介绍

MinIO 是在 Apache License v2.0 下发布的高性能对象存储.

就是说是个存东西的玩意,比较方便配好启动就能访问,也不用什么nginx转发啊什么东西的,简单方便。 就是上传文件下载文件的一个 嗯。。东西

二、服务端部署Minio

下载地址

Minio的安装与使用

看的出来,用起来很简单,下面就三行命令。从下载到启动

//下载
wget https://dl.min.io/server/minio/release/linux-amd64/minio
//放到工作目录下执行,放权
chmod +x minio
//启动 可以在 服务器的 9001 端口进入 账号密码如下
MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=password ./minio server /mnt/data --console-address ":9001"
//配置启动
./minio server /自定义Minio的配置目录
//启动后会生成一个文件夹,修改config/config.json
access_key = 账号
secret_key = 密码
//后台挂起
nohup 二进制文件所在目录 server  自定义配置目录 > 自定义启动日志.log 2>&1 &
//例如
nohup /usr/minio server  /usr/con > /usr/minio.log 2>&1 &
//创建的所有桶都在 自定义配置目录下

Minio的安装与使用

桶的概念,我的理解是一个父级目录,比如说创建桶1放视频,桶2放图片啊之类的

三、java使用Minio

(1)、先导入依赖

//maven

    io.minio
    minio
    7.0.2

//Gradle
implementation 'io.minio:minio:7.0.2'

另外本人建议不要用最新版的,貌似每个版本更新的都挺大,会导致很多api不能用,代码改动之大跟重构了一样

(2)、编写工具类

@Component
public class MinioHelper {
    //桶名称
    private String bucket;
    //远程主机地址
    private String host;
    //主机/桶名称/
    private String url;
    //账号
    private String accessKey;
    //密码
    private String secretKey;
    private MinioClient minioClient;

    @PostConstruct
    public void init() throws Exception {
        this.minioClient = new MinioClient(this.host, this.accessKey, this.secretKey);
    }

    /**
     * 上传
     *
     * @param request
     * @param num
     */
    public List putObject(MultipartFile multipartFile) throws Exception {
        // bucket 不存在,创建
        if (!minioClient.bucketExists(this.bucket)) {
            minioClient.makeBucket(this.bucket);
        }
        InputStream inputStream;
        try {
        inputStream = Objects.requireNonNull(multipartFile).getInputStream();
        // PutObjectOptions,上传配置(文件大小,内存中文件分片大小)
        PutObjectOptions putObjectOptions = new PutObjectOptions(multipartFile.getSize(), PutObjectOptions.MIN_MULTIPART_SIZE);
        // 文件的ContentType
        putObjectOptions.setContentType(multipartFile.getContentType());
        //UUID生成唯一文件名 加 文件后缀名
        String imgName = UUID.randomUUID().toString().replace("-", "") + Objects.requireNonNull(multipartFile.getOriginalFilename()).substring(multipartFile.getOriginalFilename().lastIndexOf("."));
        //上传
        minioClient.putObject(this.bucket, imgName, inputStream, putObjectOptions);
        //返回可访问路径
        this.url + UriUtils.encode(imgName, StandardCharsets.UTF_8)
        } catch (Exception ex) {
            throw new CustomizeException(ErrorCode.UP_IMAGE_ERROR);
        }
        return 上边那个可访问路径;
    }

    /**
     * 列出所有存储桶名称
     */
    public List listBucketNames()
            throws Exception {
        List bucketList = listBuckets();
        List bucketListName = new ArrayList<>();
        for (Bucket bucket : bucketList) {
            bucketListName.add(bucket.name());
        }
        return bucketListName;
    }

    /**
     * 查看所有桶
     */
    public List listBuckets()
            throws Exception {
        return minioClient.listBuckets();
    }

    /**
     * 检查存储桶是否存在
     */
    public boolean bucketExists(String bucketName)
            throws Exception {
        return minioClient.bucketExists(bucketName);
    }

    /**
     * 创建存储桶
     */
    public boolean makeBucket(String bucketName)
            throws Exception {
        boolean flag = bucketExists(bucketName);
        if (!flag) {
            minioClient.makeBucket(bucketName);
            return true;
        } else {
            return false;
        }
    }

    /**
     * 删除桶
     */
    public boolean removeBucket(String bucketName)
            throws Exception {
        boolean flag = bucketExists(bucketName);
        if (flag) {
            Iterable> myObjects = listObjects(bucketName);
            for (Result result : myObjects) {
                Item item = result.get();
                // 有对象文件,则删除失败
                if (item.size() > 0) {
                    return false;
                }
            }
            // 删除存储桶,注意,只有存储桶为空时才能删除成功。
            minioClient.removeBucket(bucketName);
            flag = bucketExists(bucketName);
            return !flag;

        }
        return false;
    }

    /**
     * 列出存储桶中的所有对象
     */
    public Iterable> listObjects(String bucketName)
            throws Exception {
        boolean flag = bucketExists(bucketName);
        if (flag) {
            return minioClient.listObjects(bucketName);
        }
        return null;
    }

    /**
     * 列出存储桶中的所有对象名称
     *
     * @param bucketName 存储桶名称
     */
    public List listObjectNames(String bucketName) throws Exception {
        List listObjectNames = new ArrayList<>();
        boolean flag = bucketExists(bucketName);
        if (flag) {
            Iterable> myObjects = listObjects(bucketName);
            for (Result result : myObjects) {
                Item item = result.get();
                listObjectNames.add(item.objectName());
            }
        }
        return listObjectNames;
    }

    /**
     * 删除一个对象
     *
     * @param bucketName 存储桶名称
     * @param objectName 存储桶里的对象名称
     */
    public boolean removeObject(String bucketName, String objectName)
            throws Exception {
        boolean flag = bucketExists(bucketName);
        if (flag) {
            minioClient.removeObject(bucketName, objectName);
            return true;
        }
        return false;

    }

    /**
     * 文件访问路径
     *
     * @param bucketName 存储桶名称
     * @param objectName 存储桶里的对象名称
     */
    public String getObjectUrl(String bucketName, String objectName) throws Exception {
        boolean flag = bucketExists(bucketName);
        String url = "";
        if (flag) {
            url = minioClient.getObjectUrl(bucketName, objectName);
        }
        return url;
    }
}

这样就可以上传文件了,至于说上传多文件,也是用循环去上传。
值得注意的是,SpringBoot默认上传文件大小为 1MB,所以需要配置一下

#解决过滤器导致文件传不过来
  servlet:
    multipart:
      max-file-size: 单文件最大 大小
      max-request-size: 一次请求发送的文件最大 大小

如果你配置了过滤器则需要

   mvc:
    hiddenmethod:
      filter:
        enabled: true

这连个都是Spring下的配置

(3)、访问图片

如果你惊奇的发现图片无法访问,那么进去管理后台找到你的那个桶,然后

Minio的安装与使用

设置访问权限为Public

Minio的安装与使用

剩下的可以慢慢玩~

迷途者寻影而行

Original: https://www.cnblogs.com/pkkyh/p/16221632.html
Author: 迷途者寻影而行
Title: Minio的安装与使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/575731/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • mysql杂记漫谈

    Hello,大家好,这几天消失了一下,主要是线上系统出了点小bug和sql性能问题,在努力搬砖,就把之前的设计模式系列放了一下下,正好趁这个复习巩固了一下sql执行计划和sql优化…

    数据库 2023年6月14日
    096
  • Java 全栈知识体系(2021 PDF 版本)

    40000 +字长文总结,民工哥已将此文整理成PDF文档了,需要的见文后下载获取方式。 全栈知识体系总览 Java入门与进阶 面向对象与Java基础 Java 基础 –…

    数据库 2023年6月9日
    0111
  • shutdown 关机与取消关机命令

    Windows 系统自带一个名为Shutdown.exe的程序,可以用于关机操作(位置在Windows\System32下) shutdown -a 取消关机 shutdown -…

    数据库 2023年6月11日
    0119
  • centos7 打包chrome离线安装包流程

    前提,centos可以连接外网 1、在目录 /etc/yum.repos.d/ 下新建文件 google-chrome.repo 文件中添加以下内容: 2、安装 yum-utils…

    数据库 2023年6月11日
    0111
  • 中文技术文档写作规范

    使用 markdown 格式书写文档 只使用一二三级标题,三级标题下面的并列性内容使用列表展示 二级标题前使用行分隔符表示分隔 段落之间使用一个空行隔开 一句话或者以逗号分隔的句子…

    数据库 2023年6月6日
    0117
  • 建造者设计模式

    可以看到这个学生类的属性是非常多的,所以构造方法不是一般的长,如果我们现在直接通过new的方式去创建: 可以看到,我们光是填参数就麻烦,我们还得一个一个对应着去填,一不小心可能就把…

    数据库 2023年6月14日
    0106
  • 正则表达式与SQL

    在我心中正则表达式和SQL就是一样的东西。 SQL是结构化查询语言,是根据某个查询、修改规则来查询修改数据,是描述一个规则给数据库,数据库来执行,数据库返回结果,过程不需要考虑,不…

    数据库 2023年6月9日
    095
  • MySQL数据备份 mysqldump 详解

    MySQL数据备份流程 打开cmd窗口 通过命令进行数据备份与恢复; 需要在Windows的命令行窗口中进行; l 开始菜单,在运行中输入cmd回车; l 或者win+R,然后输入…

    数据库 2023年6月14日
    0119
  • Shell文件属性的判断与比较

    Shell支持对文件属性的判断,常用的文件属性操作符很多,如下表所示。更多文件属性操作符可以参考命令帮助手册man test [root@centos7&#xFF5E;]#…

    数据库 2023年6月14日
    0128
  • Vuex 简单使用

    官网:https://vuex.vuejs.org/zh/ 参考文章:https://www.cnblogs.com/chinabin1993/p/9848720.html Vue…

    数据库 2023年6月16日
    0115
  • MySQL的undo日志—MVCC前置知识

    undo日志 前面学习了redo日志,redo日志保证的是崩溃时事务持久性。我们可以从redo日志恢复到系统崩溃以前。 undo日志就是为了保证事务回滚时事务所作所为都能回到事务执…

    数据库 2023年5月24日
    0140
  • 吃饱年代

    Original: https://www.cnblogs.com/life2refuel/p/15211899.htmlAuthor: 喜欢兰花山丘Title: 吃饱年代

    数据库 2023年6月9日
    0140
  • 详解 Serverless 架构的 6 大应用场景

    Serverless 架构将成为未来云计算领域重要的技术架构,将会被更多的业务所采纳。进一步深究,Serverless 架构在什么场景下有优秀的表现,在什么场景下可能表现得并不是很…

    数据库 2023年6月14日
    0114
  • postman结合newman生成测试报告

    1. cmd窗口安装newman npm install -g newman 2. cmd窗口安装newman-html报告 nnpm install -g newman-repo…

    数据库 2023年6月14日
    0125
  • NO.5 MySQL-笔记

    404. 抱歉,您访问的资源不存在。 可能是URL不正确,或者对应的内容已经被删除,或者处于隐私状态。 [En] It may be that the URL is incorre…

    数据库 2023年5月24日
    0125
  • 2022-8-29 javaweb 第一天 servlet/tomcat

    软件架构 1、C/S架构:客户端 / 服务器——–QQ,Typora,腾讯会议。 2、B/S架构:浏览器 / 服务器——…

    数据库 2023年6月14日
    0127
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球