文章目录

  • 一、MinIO 简介
  • 二、安装 MinIO
    • 1. 使用 Docker 安装 MinIO
    • 2. 进入到 MinIO 的控制台页面
    • 3. 创建 Bucket
    • 4. 修改 Bucket 的 Access Policy
  • 三、使用 MinIO Java SDK 实现对文件的基本操作
    • 1. 添加 Maven 依赖
    • 2. 创建一个 minioClient
    • 3. 上传文件到指定 Bucket 的根目录下
    • 4. 上传文件到指定 Bucket 的多级目录下
    • 5. 删除文件
    • 6. 下载文件
    • 7. 完整测试代码
  • 四、参考

一、MinIO 简介

MinIO 是一款高性能、分布式的对象存储系统. 它是一款软件产品, 可以100%的运行在标准硬件。MinIO 在传统对象存储用例(例如辅助存储,灾难恢复和归档)方面表现出色。

二、安装 MinIO

本文是在虚拟机里的 CentOS7 系统下安装 MinIO

1. 使用 Docker 安装 MinIO

首先,新建文件夹:

mkdir -p ~/minio/data

注: 我是用root用户登录,所以执行命令后新建了目录/root/minio/data

然后,使用 Docker 安装和运行 MinIO:

docker run \--restart=always \-d \-p 9000:9000 \-p 9090:9090 \--name minio \-v ~/minio/data:/data \-e "MINIO_ROOT_USER=minioadmin" \-e "MINIO_ROOT_PASSWORD=minioadmin" \quay.io/minio/minio server /data --console-address ":9090"

注:

  1. 如果还没有安装 Docker 可以参考文章:CentOS7安装Docker

  2. 默认情况下,MinIO 会在每次服务器启动时为 MinIO 控制台选择一个随机端口。访问 MinIO 服务器的浏览器客户端会自动重定向到动态选择的端口上的 MinIO 控制台。

    使用--console-address ":9090"指定了 MinIO 控制台的静态端口为:9090

  3. 如果无法访问 9000 和 9090 端口,可能是端口没开放,可以通过以下命令来查询和开放端口:

    1. 查询端口是否开放

      firewall-cmd --query-port=端口号/协议
      

      例:查询 9000 端口是否开放

      firewall-cmd --query-port=9000/tcp
      
    2. 打开端口

       firewall-cmd --permanent --add-port=端口号/协议
      

      例:打开 9000 端口

      firewall-cmd --permanent --add-port=9000/tcp
      
    3. 重新载入

      firewall-cmd --reload
      

2. 进入到 MinIO 的控制台页面

用 Docker 成功安装和运行 MinIO 后,访问:http://192.168.200.128:9090/ 进入到 MinIO 的控制台页面

注: 这里的地址http://192.168.200.128:9090/是我虚拟机的 ip 地址,访问时要以自己实际的 ip 地址为主, Linux 系统下可通过ifconfig命令来查看本机的 ip 地址

这里的 Username 和 Password 都是:minioadmin

注: 可以在使用 Docker 运行 MinIO 时通过-e "MINIO_ROOT_USER=minioadmin"
-e "MINIO_ROOT_PASSWORD=minioadmin"来指定 Username 和 Password
如果MINIO_ROOT_USERMINIO_ROOT_PASSWORD未设置,则它们都默认minioadmin

成功登录进入后,可以看到该页面:

3. 创建 Bucket

点击 Create a Bucket 创建一个 Bucket

输入要创建的 Bucket 名称,然后点击 Create Bucket 即可创建一个 Bucket ,这里创建一个名为:test-bucket 的 Bucket

可以在 Administrator 下面的 Buckets 里查看和管理创建的 Bucket

4. 修改 Bucket 的 Access Policy

点击 test-bucket 进入到该 Bucket 的设置页面

这里要将 test-bucket 的 Access Policy 修改为 public,设置为 public 后所有的用户都可以直接通过链接来访问对象

三、使用 MinIO Java SDK 实现对文件的基本操作

1. 添加 Maven 依赖

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

注意: 最低要求 JDK8 及以上版本

2. 创建一个 minioClient

private static final MinioClient minioClient =MinioClient.builder().endpoint("http://192.168.200.128:9000").credentials("minioadmin", "minioadmin").build();
  • endpoint 方法里的参数按实际情况填 MinIO 的服务地址
  • credentials 方法里的参数按实际情况分别填上对应的 Username 和 Password(accessKey 和 secretKey)

3. 上传文件到指定 Bucket 的根目录下

@Test
void testUploadObject() {try {UploadObjectArgs uploadObjectArgs = UploadObjectArgs.builder().bucket("test-bucket").object("pic.jpg").filename("D:\\images\\pic.jpg").build();minioClient.uploadObject(uploadObjectArgs);System.out.println("上传成功!");} catch (Exception e) {System.out.println("上传失败!");}
}

该方法将D:\\images\\pic.jpg文件上传到 MinIO 的test-bucket上保存为pic.jpg

我们可以在 MinIO 的控制台中查看是否上传成功:

可以看到D:\\images\\pic.jpg文件成功上传到 MinIO 的 test-bucket 上,文件名为 pic.jpg

我们还可以通过访问http://192.168.200.128:9000/test-bucket/pic.jpg来查看该文件

注: 在 MinIO 中存储文件的地方称为 Bucket ,Bucket 中的文件是一个 object

这里 test-bucket 就是一个 Bucket ,里面的文件 pic.jpg 是该 Bucket 的 object

4. 上传文件到指定 Bucket 的多级目录下

@Test
void testUploadObject2() {try {UploadObjectArgs uploadObjectArgs = UploadObjectArgs.builder().bucket("test-bucket").object("2023/1/14/pic.jpg").filename("D:\\images\\pic.jpg").build();minioClient.uploadObject(uploadObjectArgs);System.out.println("上传成功!");} catch (Exception e) {System.out.println("上传失败!");}
}

这里用当前日期作为多级目录,使用方式跟上面的testUploadObject测试方法类似,创建多级目录可以在.object("2023/1/14/pic.jpg")里写上对应的路径来创建。运行该方法后,可以在控制台上查看是否成功上传到指定的多级目录下:

可以看到文件成功上传到指定的目录下

我们同样可以通过访问 http://192.168.200.128:9000/test-bucket/2023/1/14/pic.jpg 来查看该文件

5. 删除文件

@Test
void testRemoveObject() {try {RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder().bucket("test-bucket").object("pic.jpg").build();minioClient.removeObject(removeObjectArgs);System.out.println("删除成功!");} catch (Exception e) {System.out.println("删除失败!");}
}

该方法删除了 MinIO 的test-bucket下的pic.jpg文件

可以看到之前上传的pic.jpg文件已经成功删除

6. 下载文件

@Test
void testDownloadObject() {try {DownloadObjectArgs downloadObjectArgs = DownloadObjectArgs.builder().bucket("test-bucket").object("2023/1/14/pic.jpg").filename("D:\\images\\pic2.jpg").build();minioClient.downloadObject(downloadObjectArgs);System.out.println("下载成功!");} catch (Exception e) {System.out.println("下载失败!");}
}

这个方法将 MinIO 的test-bucket下的2023/1/14/pic.jpg文件下载到D:\\images\\pic2.jpg

运行该测试方法后,查看是否成功下载到相应的路径下:

可以看到文件成功从 MinIO 上下载下来了

7. 完整测试代码

package com.lin.project;import io.minio.DownloadObjectArgs;
import io.minio.MinioClient;
import io.minio.RemoveObjectArgs;
import io.minio.UploadObjectArgs;
import org.junit.jupiter.api.Test;/*** @author lin*/
public class MinIOTest {private static final MinioClient minioClient =MinioClient.builder().endpoint("http://192.168.200.128:9000").credentials("minioadmin", "minioadmin").build();@Testvoid testUploadObject() {try {UploadObjectArgs uploadObjectArgs = UploadObjectArgs.builder().bucket("test-bucket").object("pic.jpg").filename("D:\\images\\pic.jpg").build();minioClient.uploadObject(uploadObjectArgs);System.out.println("上传成功!");} catch (Exception e) {System.out.println("上传失败!");}}@Testvoid testUploadObject2() {try {UploadObjectArgs uploadObjectArgs = UploadObjectArgs.builder().bucket("test-bucket").object("2023/1/14/pic.jpg").filename("D:\\images\\pic.jpg").build();minioClient.uploadObject(uploadObjectArgs);System.out.println("上传成功!");} catch (Exception e) {System.out.println("上传失败!");}}@Testvoid testRemoveObject() {try {RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder().bucket("test-bucket").object("pic.jpg").build();minioClient.removeObject(removeObjectArgs);System.out.println("删除成功!");} catch (Exception e) {System.out.println("删除失败!");}}@Testvoid testDownloadObject() {try {DownloadObjectArgs downloadObjectArgs = DownloadObjectArgs.builder().bucket("test-bucket").object("2023/1/14/pic.jpg").filename("D:\\images\\pic2.jpg").build();minioClient.downloadObject(downloadObjectArgs);System.out.println("下载成功!");} catch (Exception e) {System.out.println("下载失败!");}}
}

四、参考

  1. https://min.io/docs/minio/container/index.html
  2. https://min.io/docs/minio/linux/reference/minio-server/minio-server.html#environment-variables
  3. https://min.io/docs/minio/container/administration/minio-console.html#static-vs-dynamic-port-assignment
  4. https://min.io/docs/minio/linux/developers/java/minio-java.html#java-quickstart-guide
  5. https://min.io/docs/minio/linux/developers/java/API.html#

安装MinIO和使用MinIO Java SDK实现对文件的基本操作相关推荐

  1. 从Java SDK看DuerOS的技能开发

    DuerOS是对话式AI系统,既然都已经是人工智能了,为什么还要在DuerOS上开发技能服务呢? 温故知新,我们还是要重新审视一下AI,具体可以参见<老码农眼中的简明AI>.从编程的角度看 ...

  2. minio的安装和springboot集成minio

    文章目录 1.什么是minio 1.1 minio的优点 1.2 MinIO的基础概念 1.3 纠删码EC (Erasure Code) 1.4 存储形式 1.5 存储方案 2 MinIO环境搭建 2 ...

  3. centos java yum_CentOS7 使用yum命令安装Java SDK

    CentOS 6.X 和 7.X 自带有OpenJDK runtime environment  (openjdk).它是一个在linux上实现开源的Java 平台. 安装方式: 1.输入以下命令,以 ...

  4. Java sdk及tomcat安装设置

    在安装好Java SDK后,还需要设置一些系统变量,系统变量的设置可以在系统属性-高级-环境变量中进行 JAVA_HOME=JAVA安装目录 CLASSPATH=-            库路径,可以 ...

  5. centos 安装java sdk_Linux——CentOS7使用yum命令安装Java SDK

    安装jdk有很多种方式比如我们可以在Oracle Technology Network>Java>Java SE>Download(点此链接跳转)下载jdk-8u25-linux-x ...

  6. Ubuntu下JAVA SDK安装

    参考:Ubuntu下JAVA SDK(JDK)的安装并运行第一个小程序 介绍 JAVA是一门write-once, run anywhere 的语言.  我们在这里要安装JDK(JAVA develo ...

  7. world wind java sdk_World wind Java SDK安装开发测试

    worldwind早前发布了开源的java版本的SDK.下载到后的安装测试步骤如下: 1. 下载worldwind java sdk 解压之后,可以获得jogl.jar.gluegen-rt.jar. ...

  8. java sdk 安装_Java SDK下载安装环境配置+AndroidKiller配置教程

    1.先要安装好适合你系统版本的JDK,在这里我使用的是JDK8,161版本: JAVA(JDK)版本:8,V161版本(Java SEDevelopment Kit 8u161),下载地址: 注意:因 ...

  9. linux安装和简单使用minio client | mc命令

    1.安装 地址:https://dl.min.io/client/mc/release/ 这里演示amd64的系统 执行下载命令(个人喜欢将安装资源下载至/opt/local/目录下) wget  h ...

最新文章

  1. 清华学生计划表上热搜,大写的服!
  2. 建立时间裕量与保持时间裕量的简单理解
  3. alter table add column多个字段_SQL对表中字段的操作 alter
  4. python的常用数据类型_python 常用数据类型
  5. python在租房过程中的应用
  6. VS2008 vs2010中JQUERY智能提醒
  7. 为什么我不推荐Python初学者直接看项目源码?工作五年的程序员给的忠告
  8. google+stackoverflow_解决stackOverflow打开慢的问题
  9. [转]VB:如何检测到U盘的插拔(源代码)
  10. 【数据库】使用PLSQL工具时,ORACLE客户端连接串的配置
  11. Linux系统中设置静态ip地址
  12. ArcSDE常用操作命令
  13. [LCS]LCS应用案例--SipSnoop概述。
  14. 大数据量JSONObject.fromObject性能问题(大数据传给前台)
  15. 机器学习数据不平衡问题及其解决方法
  16. python jinja2_Python模块学习 - jinja2
  17. 【MSSql2000】select
  18. pci设备身份识别码介绍说明
  19. 使用Xamarin实现跨平台移动应用开发(转载)
  20. 一款高仿腾讯漫画的漫画阅读类 APP

热门文章

  1. 什么是soft matting方法_宜家的娃娃为什么这么”丑“
  2. 【等保】等保2.0与等保1.0的区别变化看这里!
  3. 安装w3af时已经安装retire却提示没有安装的问题
  4. 稳定封装药物磷脂-聚乙二醇-叠氮 DSPE-PEG-Azide,DSPE-PEG-N3
  5. 滚粗后-高中化学常用方程
  6. java基于微信小程序旅游管理系统 uniapp 小程序
  7. bzoj1787.紧急集合(倍增LCA)
  8. 手绘VS码绘——动态篇(视觉错觉)
  9. 2022年全球市场印刷电路板和印刷电路板总体规模、主要生产商、主要地区、产品和应用细分研究报告
  10. div id 与div class 的区别