如何正确安装并熟练使用Minio存储服务?

2026-05-22 08:361阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1312个文字,预计阅读时间需要6分钟。

如何正确安装并熟练使用Minio存储服务?

Minio简介MinIO是一款在Apache License v2.0下发布的、高性能的对象存储。简单来说,MinIO就像一个存储东西的小玩偶,方便配置,启动后即可访问,无需复杂的设置,也不需要nginx等中间件。

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

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

二、服务端部署Minio

下载地址

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

//下载 wget 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 & //创建的所有桶都在 自定义配置目录下

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

三、java使用Minio (1)、先导入依赖

//maven <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>7.0.2</version> </dependency> //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<String> 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<String> listBucketNames() throws Exception { List<Bucket> bucketList = listBuckets(); List<String> bucketListName = new ArrayList<>(); for (Bucket bucket : bucketList) { bucketListName.add(bucket.name()); } return bucketListName; } /** * 查看所有桶 */ public List<Bucket> 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<Result<Item>> myObjects = listObjects(bucketName); for (Result<Item> result : myObjects) { Item item = result.get(); // 有对象文件,则删除失败 if (item.size() > 0) { return false; } } // 删除存储桶,注意,只有存储桶为空时才能删除成功。 minioClient.removeBucket(bucketName); flag = bucketExists(bucketName); return !flag; } return false; } /** * 列出存储桶中的所有对象 */ public Iterable<Result<Item>> listObjects(String bucketName) throws Exception { boolean flag = bucketExists(bucketName); if (flag) { return minioClient.listObjects(bucketName); } return null; } /** * 列出存储桶中的所有对象名称 * * @param bucketName 存储桶名称 */ public List<String> listObjectNames(String bucketName) throws Exception { List<String> listObjectNames = new ArrayList<>(); boolean flag = bucketExists(bucketName); if (flag) { Iterable<Result<Item>> myObjects = listObjects(bucketName); for (Result<Item> 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

剩下的可以慢慢玩~

迷途者寻影而行
标签:安装使

本文共计1312个文字,预计阅读时间需要6分钟。

如何正确安装并熟练使用Minio存储服务?

Minio简介MinIO是一款在Apache License v2.0下发布的、高性能的对象存储。简单来说,MinIO就像一个存储东西的小玩偶,方便配置,启动后即可访问,无需复杂的设置,也不需要nginx等中间件。

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

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

二、服务端部署Minio

下载地址

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

//下载 wget 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 & //创建的所有桶都在 自定义配置目录下

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

三、java使用Minio (1)、先导入依赖

//maven <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>7.0.2</version> </dependency> //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<String> 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<String> listBucketNames() throws Exception { List<Bucket> bucketList = listBuckets(); List<String> bucketListName = new ArrayList<>(); for (Bucket bucket : bucketList) { bucketListName.add(bucket.name()); } return bucketListName; } /** * 查看所有桶 */ public List<Bucket> 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<Result<Item>> myObjects = listObjects(bucketName); for (Result<Item> result : myObjects) { Item item = result.get(); // 有对象文件,则删除失败 if (item.size() > 0) { return false; } } // 删除存储桶,注意,只有存储桶为空时才能删除成功。 minioClient.removeBucket(bucketName); flag = bucketExists(bucketName); return !flag; } return false; } /** * 列出存储桶中的所有对象 */ public Iterable<Result<Item>> listObjects(String bucketName) throws Exception { boolean flag = bucketExists(bucketName); if (flag) { return minioClient.listObjects(bucketName); } return null; } /** * 列出存储桶中的所有对象名称 * * @param bucketName 存储桶名称 */ public List<String> listObjectNames(String bucketName) throws Exception { List<String> listObjectNames = new ArrayList<>(); boolean flag = bucketExists(bucketName); if (flag) { Iterable<Result<Item>> myObjects = listObjects(bucketName); for (Result<Item> 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

剩下的可以慢慢玩~

迷途者寻影而行
标签:安装使