栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Minio的安装与使用

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Minio的安装与使用

Minio的安装与使用 一、Minio介绍

MinIO 是在 Apache License v2.0 下发布的高性能对象存储.
就是说是个存东西的玩意,比较方便配好启动就能访问,也不用什么nginx转发啊什么东西的,简单方便。 就是上传文件下载文件的一个 嗯。。东西

二、服务端部署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"

桶的概念,我的理解是一个父级目录,比如说创建桶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);
    }

    
    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;
    }

    
    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;
    }

    
    public boolean removeObject(String bucketName, String objectName)
            throws Exception {
        boolean flag = bucketExists(bucketName);
        if (flag) {
            minioClient.removeObject(bucketName, objectName);
            return true;
        }
        return false;

    }

    
    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)、访问图片

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

设置访问权限为Public

剩下的可以慢慢玩~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/860237.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号