一、MINIO 控制台管理¶
1.1 登录控制台¶
如果安装时没有指定用户密码信息,则登录默认用户和密码 minioadmin/minioadmin

使用指定用户和密码登录

1.2 创建Bucket和上传文件¶
如下的版本minio-20250723155402.0.0 版本界面功能发生重大变化

minio.RELEASE.2025-04-22T22-12-26Z以前版本界面

查看生成目录
#查看生成目录
[root@ubuntu2204 ~]#tree /minio/
/minio/
├── data1
│ └── mybucket
├── data2
│ └── mybucket
├── data3
│ └── mybucket
├── data4
│ └── mybucket
├── data5
│ └── mybucket
├── data6
│ └── mybucket
├── data7
│ └── mybucket
└── data8
└── mybucket
16 directories, 0 files
#上传文件19M图片的文件

[root@ubuntu2204 ~]#tree /minio/
/minio/
├── data1
│ └── mybucket
│ └── 19M图片.jpg
│ ├── ff0324e9-45d5-4cb3-af1e-b04cb9b948b2
│ │ └── part.1
│ └── xl.meta
├── data2
│ └── mybucket
│ └── 19M图片.jpg
│ ├── ff0324e9-45d5-4cb3-af1e-b04cb9b948b2
│ │ └── part.1
│ └── xl.meta
├── data3
│ └── mybucket
│ └── 19M图片.jpg
│ ├── ff0324e9-45d5-4cb3-af1e-b04cb9b948b2
│ │ └── part.1
│ └── xl.meta
├── data4
│ └── mybucket
│ └── 19M图片.jpg
│ ├── ff0324e9-45d5-4cb3-af1e-b04cb9b948b2
│ │ └── part.1
│ └── xl.meta
├── data5
│ └── mybucket
│ └── 19M图片.jpg
│ ├── ff0324e9-45d5-4cb3-af1e-b04cb9b948b2
│ │ └── part.1
│ └── xl.meta
├── data6
│ └── mybucket
│ └── 19M图片.jpg
│ ├── ff0324e9-45d5-4cb3-af1e-b04cb9b948b2
│ │ └── part.1
│ └── xl.meta
├── data7
│ └── mybucket
│ └── 19M图片.jpg
│ ├── ff0324e9-45d5-4cb3-af1e-b04cb9b948b2
│ │ └── part.1
│ └── xl.meta
└── data8
└── mybucket
└── 19M图片.jpg
├── ff0324e9-45d5-4cb3-af1e-b04cb9b948b2
│ └── part.1
└── xl.meta
32 directories, 16 files
[root@ubuntu2204 ~]#du -sh /minio/
45M /minio/
1.3 创建访问 Access key 和 Secret key¶
创建 Access Key 和 Secret key 用于访问数据的凭据

注意: 此处的 Secret key 是有一次性显示,需要立即复制保存,否则只能重新生成新的 Access key

二、MINIO 客户端 MC¶
2.1 MC 介绍¶
https://min.io/docs/minio/linux/reference/minio-mc.htm
https://min.io/docs/minio/linux/reference/minio-mc-admin.htm
MC是MinIO 客户端命令行工具 MinIO Client (mc)
MC 可以用于访问MinIO的文件, 使用方法类似于常用的UNIX命令: 如:Is, cat, cp,rm,diff, find等
它支持文件系统和兼容Amazon S3的云存储服务(AWS Signature v2和v4)。
2.2 MC 部署¶
2.2.1 二进制部署¶
二进制部署下载
#二进制部署下载
https://dl.min.io/client/mc/release/linux-amd64/mc
http://dl.minio.org.cn/client/mc/release/linux-amd64/mc
https://min.io/download?
license=enterprise&platform=linux&subscription=enterprise-plus

范例: 二进制部署
#官网下载
[root@ubuntu2204 ~]#wget https://dl.min.io/client/mc/release/linux-amd64/mc
#国内镜像下载
[root@ubuntu2204 ~]#wget http://dl.minio.org.cn/client/mc/release/linux-amd64/mc
[root@ubuntu2204 ~]#install mc /usr/local/bin/mc
2.2.2 包安装¶
https://min.io/download?license=enterprise&platform=linux&subscription=enterprise-plus
DEB 包
wget https://dl.min.io/client/mc/release/linuxamd64/mcli_20240731155833.0.0_amd64.deb
dpkg -i mcli_20240731155833.0.0_amd64.deb
mcli alias set myminio/ http://MINIO-SERVER MYUSER MYPASSWORD
RPM 包
dnf install https://dl.min.io/client/mc/release/linux-amd64/mcli-20240731155833.0.0-1.x86_64.rpm
mcli alias set myminio/ http://MINIO-SERVER MYUSER MYPASSWORD
2.2.3 容器化部署¶
容器化部署
https://min.io/download#/docker
https://min.io/download?license=agpl&platform $\equiv$ docker#/docker

范例:容器化部署
[root@ubuntu2204 ~]#docker run --name my-mc --hostname my-mc -it --entrypoint /bin/bash --rm minio/mc
[root@my-mc /]# mc alias set myminio/ https://my-minio-service MY-USER MY-PASSWORD
[root@my-mc /]# mc ls myminio/mybucket
2.3 MC 命令使用¶
2.3.1 MC 命令说明¶
帮助查看
mc --help
mc [GLOBALFLAGS] COMMAND --help
常见命令
ls #列出文件和文件夹
mb #创建一个存储桶或一一个文件夹
cat #显示文件和对象内容
pipe #一个STDIN重定向到一一个对象或者文件或者STDOUT
share #生成用于共享的URL
cp # 拷贝文件和对象
mirror #给存储桶和文件夹做镜像
find #基于参数查找文件
diff #对两个文件夹或者存储桶比较差异
rm #删除文件和对象
events #管理对象通知
watch #监视文件和对象的事件
policy #管理访问策略
config #管理mc配置文件
update #检查软件更新
version #输出版本信息
2.3.2 MC 使用¶
范例: 查看帮助
[root@ubuntu2204 ~]#mc
[root@ubuntu2204 ~]#mc --help
NAME:
mc - MinIO Client for object storage and filesystems.
USAGE:
mc [FLAGS] COMMAND [COMMAND FLAGS | -h] [ARGUMENTS...]
COMMANDS:
alias manage server credentials in configuration file
ls list buckets and objects
mb make a bucket
rb remove a bucket
cp copy objects
mv move objects
rm remove object(s)
mirror synchronize object(s) to a remote site
cat display object contents
head display first 'n' lines of an object
pipe stream STDIN to an object
find search for objects
sql run sql queries on objects
stat show object metadata
tree list buckets and objects in a tree format
du summarize disk usage recursively
retention set retention for object(s)
legalhold manage legal hold for object(s)
support support related commands
license license related commands
share generate URL for temporary access to an object
version manage bucket versioning
ilm manage bucket lifecycle
quota manage bucket quota
encrypt manage bucket encryption config
event manage object notifications
watch listen for object notification events
undo undo PUT/DELETE operations
anonymous manage anonymous access to buckets and objects
tag manage tags for bucket and object(s)
diff list differences in object name, size, and date between two buckets
replicate configure server side bucket replication
admin manage MinIO servers
idp manage MinIO IDentity Provider server configuration
update update mc to latest release
ready checks if the cluster is ready or not
ping perform liveness check
od measure single stream upload and download
batch manage batch jobs
GLOBAL FLAGS:
--autocompletion install auto-completion for your shell
--config-dir value, -C value path to configuration folder (default: "/root/.mc")
--quiet, -q disable progress bar display
--no-color disable color theme
--json enable JSON lines formatted output
--debug enable debug output
--insecure disable SSL certificate verification
--limit-upload value limits uploads to a maximum rate in KiB/s, MiB/s, GiB/s. (default: unlimited)
--limit-download value limits downloads to a maximum rate in KiB/s, MiB/s, GiB/s. (default: unlimited)
--help, -h show help
--version, -v print the version
TIP:
Use 'mc --autocompletion' to enable shell autocompletion
COPYRIGHT:
Copyright (c) 2015-2023 MinIO, Inc.
LICENSE:
GNU AGPLv3 <https://www.gnu.org/licenses/agpl-3.0.html>
范例: 开启mc命令自动补全功能
[root@ubuntu2204 ~]#mc --autocompletion
mc: Your shell is set to 'bash', by env var 'SHELL'.
mc: enabled autocompletion in your 'bash' rc file. Please restart your shell.
#上面命令本质上就是修改.bashrc文件
[root@ubuntu2204 ~]#tail -n1 .bashrc
complete -C /usr/local/bin/mc mc
#需要重新登录才能生效
[root@ubuntu2204 ~]#mc
.cache/ data/ .mc/ snap/ .ssh/
[root@ubuntu2204 ~]#exit
#重新登录后,支持自动补会mc命令
[root@ubuntu2204 ~]#mc <tab> <tab>
admin cat encrypt idp ls od rb rm support update
alias cp event ilm mb ping ready share tag version
anonymous diff find legalhold mirror pipe replicate sql tree watch
batch du head license mv quota retention stat undo
范例: 查看客户端版本和连接信息
[root@ubuntu2204 ~]#mc --version
mc version RELEASE.2023-08-01T23-30-57Z (commit-id=0a529d5e642f1a50a74b256c683be453e26bf7e9)
Runtime: go1.19.12 linux/amd64
Copyright (c) 2015-2023 MinIO, Inc.
License GNU AGPLv3 <https://www.gnu.org/licenses/agpl-3.0.html>
#查看默认连接信息
[root@ubuntu2204 ~]#mc alias ls
gcs
URL : https://storage.googleapis.com
AccessKey : YOUR-ACCESS-KEY-HERE
SecretKey : YOUR-SECRET-KEY-HERE
API : S3v2
Path : dns
local
URL : http://localhost:9000
AccessKey :
SecretKey :
API :
Path : auto
play
URL : https://play.min.io
AccessKey : Q3AM3UQ867SPQQA43P2F
SecretKey : zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG
API : S3v4
Path : auto
s3
URL : https://s3.amazonaws.com
AccessKey : YOUR-ACCESS-KEY-HERE
SecretKey : YOUR-SECRET-KEY-HERE
API : S3v4
Path : dns
[root@ubuntu2204 ~]#cat /root/.mc/config.json
{
"version": "10",
"aliases": {
"gcs": {
"url": "https://storage.googleapis.com",
"accessKey": "YOUR-ACCESS-KEY-HERE",
"secretKey": "YOUR-SECRET-KEY-HERE",
"api": "S3v2",
"path": "dns"
},
"local": {
"url": "http://localhost:9000",
"accessKey": "",
"secretKey": "",
"api": "S3v4",
"path": "auto"
},
"play": {
"url": "https://play.min.io",
"accessKey": "Q3AM3UQ867SPQQA43P2F",
"secretKey": "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG",
"api": "S3v4",
"path": "auto"
},
"s3": {
"url": "https://s3.amazonaws.com",
"accessKey": "YOUR-ACCESS-KEY-HERE",
"secretKey": "YOUR-SECRET-KEY-HERE",
"api": "S3v4",
"path": "dns"
}
}
}
#默认无法访问
[root@ubuntu2404 ~]#mc admin info local
mc: <ERROR> Unable to get service info. Access Denied
范例: 初始连接配置单机存储
#建议使用key进行连接
[root@ubuntu2204 ~]#mc alias set minio-server http://minio.wang.org:9000 Ib4kdhJ3y5E0sbtcp8nH eTbjZq2R06xBgpDNMIqOWQOo7z7rItaSDZEitAAY
Added `minio-server` successfully.
[root@ubuntu2204 ~]#mc admin info minio-server
● minio1.wang.org:9000
Uptime: 2 hours
Version: 2024-10-02T17:50:41Z
Network: 3/3 OK
Drives: 4/4 OK
Pool: 1
● minio2.wang.org:9000
Uptime: 2 hours
Version: 2024-10-02T17:50:41Z
Network: 3/3 OK
Drives: 4/4 OK
Pool: 1
● minio3.wang.org:9000
Uptime: 2 hours
Version: 2024-10-02T17:50:41Z
Network: 3/3 OK
Drives: 4/4 OK
Pool: 1
┌──────┬──────────────────────┬─────────────────────┬──────────────┐
│ Pool │ Drives Usage │ Erasure stripe size │ Erasure sets │
│ 1st │ 1.4% (total: 80 GiB) │ 12 │ 1 │
└──────┴──────────────────────┴─────────────────────┴──────────────┘
81 MiB Used, 2 Buckets, 17 Objects
12 drives online, 0 drives offline, EC:4
#使用用户名和密码连接
[root@ubuntu2204 ~]#mc alias set local http://127.0.0.1:9000 minioadmin minioadmin
[root@ubuntu2204 ~]#mc config host ls
[root@ubuntu2204 ~]#mc admin info local
#验证后创建主机连接
[root@ubuntu2204 ~]#mc config host add local http://127.0.0.1:9000 admin 12345678
mc: Configuration written to `/root/.mc/config.json`. Please update your access credentials.
mc: Successfully created `/root/.mc/share`.
mc: Initialized share uploads `/root/.mc/share/uploads.json` file.
mc: Initialized share downloads `/root/.mc/share/downloads.json` file.
Added `local` successfully.
#查看连接主机
[root@ubuntu2204 ~]#mc config host ls
gcs
URL : https://storage.googleapis.com
AccessKey : YOUR-ACCESS-KEY-HERE
SecretKey : YOUR-SECRET-KEY-HERE
API : S3v2
Path : dns
local
URL : http://127.0.0.1:9000
AccessKey : minioadmin
SecretKey : minioadmin
API : s3v4
Path : auto
play
URL : https://play.min.io
AccessKey : Q3AM3UQ867SPQQA43P2F
SecretKey : zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG
API : S3v4
Path : auto
s3
URL : https://s3.amazonaws.com
AccessKey : YOUR-ACCESS-KEY-HERE
SecretKey : YOUR-SECRET-KEY-HERE
API : S3v4
Path : dns
#配置存放在下面文件中
[root@ubuntu2204 ~]#cat .mc/config.json
{
"version": "10",
"aliases": {
"gcs": {
"url": "https://storage.googleapis.com",
"accessKey": "YOUR-ACCESS-KEY-HERE",
"secretKey": "YOUR-SECRET-KEY-HERE",
"api": "S3v2",
"path": "dns"
},
"local": {
"url": "http://127.0.0.1:9000",
"accessKey": "minioadmin",
"secretKey": "minioadmin",
"api": "S3v4",
"path": "auto"
},
"play": {
"url": "https://play.min.io",
"accessKey": "Q3AM3UQ867SPQQA43P2F",
"secretKey": "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG",
"api": "S3v4",
"path": "auto"
},
"s3": {
"url": "https://s3.amazonaws.com",
"accessKey": "YOUR-ACCESS-KEY-HERE",
"secretKey": "YOUR-SECRET-KEY-HERE",
"api": "S3v4",
"path": "dns"
}
}
}
#单机显示
[root@ubuntu2204 ~]#mc admin info local
● 127.0.0.1:9000
Uptime: 21 minutes
Version: 2023-08-29T23:07:35Z
Network: 1/1 OK
Drives: 1/1 OK
Pool: 1
Pools:
1st, Erasure sets: 1, Drives per erasure set: 1
0 B Used, 1 Bucket, 0 Objects
1 drive online, 0 drives offline
#查看存储中的数据文件
[root@ubuntu2204 ~]#mc ls local
[2023-09-05 09:19:38 CST] 0B mybucket/
[root@ubuntu2204 ~]#mc ls local/mybucket
[2023-09-05 09:20:28 CST] 18MiB STANDARD 19M图片.jpg
范例: 管理分布式存储
#添加分布式存储的任意一个节点连接
[root@ubuntu2204 ~]#mc config host add minio-cluster http://10.0.0.101:9000 admin 12345678
#查看连接信息
[root@ubuntu2204 ~]#mc config host ls
gcs
URL : https://storage.googleapis.com
AccessKey : YOUR-ACCESS-KEY-HERE
SecretKey : YOUR-SECRET-KEY-HERE
API : S3v2
Path : dns
local
URL : http://localhost:9000
AccessKey :
SecretKey :
API :
Path : auto
minio-cluster
URL : http://10.0.0.101:9000
AccessKey : admin
SecretKey : 12345678
API : s3v4
Path : auto
play
URL : https://play.min.io
AccessKey : Q3AM3UQ867SPQQA43P2F
SecretKey : zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG
API : S3v4
Path : auto
s3
URL : https://s3.amazonaws.com
AccessKey : YOUR-ACCESS-KEY-HERE
SecretKey : YOUR-SECRET-KEY-HERE
API : S3v4
Path : dns
#集群显示
[root@ubuntu2204 ~]#mc admin info minio-cluster
● 10.0.0.101:9000
Uptime: 2 hours
Version: 2023-08-29T23:07:35Z
Network: 3/3 OK
Drives: 1/1 OK
Pool: 1
● 10.0.0.102:9000
Uptime: 2 hours
Version: 2023-08-29T23:07:35Z
Network: 3/3 OK
Drives: 1/1 OK
Pool: 1
● 10.0.0.103:9000
Uptime: 2 hours
Version: 2023-08-29T23:07:35Z
Network: 3/3 OK
Drives: 1/1 OK
Pool: 1
Pools:
1st, Erasure sets: 1, Drives per erasure set: 3
18 MiB Used, 1 Bucket, 1 Object
3 drives online, 0 drives offline
#测试连通
[root@ubuntu2204 ~]#mc ping -c 1 minio-cluster
1: http://10.0.0.101:9000 min=1.92ms max=1.92ms average=1.92ms errors=0 roundtrip=1.92ms
#查看文件
[root@ubuntu2204 ~]#mc ls minio-cluster
[2023-09-05 11:26:05 CST] 0B mybucket/
[root@ubuntu2204 ~]#mc ls minio-cluster/mybucket
[2023-09-05 14:05:33 CST] 12MiB STANDARD 11M.jpg
[2023-09-05 11:27:21 CST] 18MiB STANDARD image-19M.jpg
#查看存储目录大小
[root@ubuntu2204 ~]#mc du minio-cluster
30MiB 2 objects
#删除连接信息
[root@ubuntu2204 ~]#mc config host rm minio-cluster
Removed `minio-cluster` successfully.
#确认删除
[root@ubuntu2204 ~]#mc config host ls
范例: 文件下载上传
[root@ubuntu2204 ~]#mc ls minio-cluster/mybucket
[2023-09-05 14:05:33 CST] 12MiB STANDARD 11M.jpg
[2023-09-05 11:27:21 CST] 18MiB STANDARD image-19M.jpg
#下载
[root@ubuntu2204 ~]#mc cp minio-cluster/mybucket/11M.jpg .
...000/mybucket/11M.jpg: 11.51 MiB / 11.51 MiB
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 152.93 MiB/s 0s
[root@ubuntu2204 ~]#ls
11M.jpg data mc snap
#上传
[root@ubuntu2204 ~]#mc cp /var/log/syslog minio-cluster/mybucket
/var/log/syslog: 717.02 KiB / 717.02 KiB
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 22.96 MiB/s 0s
[root@ubuntu2204 ~]#mc ls minio-cluster/mybucket
[2023-09-05 14:05:33 CST] 12MiB STANDARD 11M.jpg
[2023-09-05 11:27:21 CST] 18MiB STANDARD image-19M.jpg
[2023-09-05 14:44:16 CST] 717KiB STANDARD syslog
#上传目录,需要加-r选项,注意:目录以/后缀表示只上传目录的内容,并不上传目录本身
[root@ubuntu2204 ~]#mc cp -r /etc/netplan/ minio-cluster/mybucket
...nstaller-config.yaml: 754 B / 754 B
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 32.28 KiB/s 0s
[root@ubuntu2204 ~]#mc ls minio-cluster/mybucket
[2023-09-05 14:47:54 CST] 305B STANDARD 01-netcfg.yaml
[2023-09-05 14:47:54 CST] 333B STANDARD 01-netcfg.yaml.bak
[2023-09-05 14:05:33 CST] 12MiB STANDARD 11M.jpg
[2023-09-05 11:27:21 CST] 18MiB STANDARD image-19M.jpg
[2023-09-05 14:44:16 CST] 717KiB STANDARD syslog
[2023-09-05 14:48:00 CST] 0B bak/
#上传目录,需要加-r选项,注意:目录不以/后缀表示会上传目录本身及内容
[root@ubuntu2204 ~]#mc cp -r /etc/netplan minio-cluster/mybucket
...nstaller-config.yaml: 754 B / 754 B
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 28.04 KiB/s 0s
[root@ubuntu2204 ~]#mc ls minio-cluster/mybucket
[2023-09-05 14:47:54 CST] 305B STANDARD 01-netcfg.yaml
[2023-09-05 14:47:54 CST] 333B STANDARD 01-netcfg.yaml.bak
[2023-09-05 14:05:33 CST] 12MiB STANDARD 11M.jpg
[2023-09-05 11:27:21 CST] 18MiB STANDARD image-19M.jpg
[2023-09-05 14:44:16 CST] 717KiB STANDARD syslog
[2023-09-05 14:48:13 CST] 0B bak/
[2023-09-05 14:48:13 CST] 0B netplan/
#删除多个文件
[root@ubuntu2204 ~]#mc rm minio-cluster/mybucket/01-netcfg.yaml.bak minio-cluster/mybucket/01-netcfg.yaml
#查看目录结构
[root@ubuntu2204 ~]#mc tree minio-cluster
minio-cluster
└─ mybucket
└─ netplan
└─ bak
#删除目录
[root@ubuntu2204 ~]#mc rm -r --force minio-cluster/mybucket/netplan/bak
Removed `minio-cluster/mybucket/netplan/bak/00-installer-config.yaml`.
[root@ubuntu2204 ~]#mc tree minio-cluster
minio-cluster
└─ mybucket
└─ netplan
范例: 管理bucket
#创建bucket
[root@ubuntu2204 ~]#mc mb minio-cluster/bucket01
Bucket created successfully `minio-cluster/bucket01`.
[root@ubuntu2204 ~]#mc ls minio-cluster
[2023-09-05 15:00:06 CST] 0B bucket01/
[2023-09-05 11:26:05 CST] 0B mybucket/
#上传文件
[root@ubuntu2204 ~]#mc cp /etc/issue minio-cluster/bucket01
[root@ubuntu2204 ~]#mc tree -f minio-cluster/bucket01
minio-cluster/bucket01
└─ issue
#不能直接删除不为空的bucket
[root@ubuntu2204 ~]#mc rb minio-cluster/bucket01
mc: <ERROR> `minio-cluster/bucket01` is not empty. Retry this command with '--force' flag if you want to remove `minio-cluster/bucket01` and all its contents
#强制删除不为空的bucket
[root@ubuntu2204 ~]#mc rb --force minio-cluster/bucket01
Removed `minio-cluster/bucket01` successfully.
#确认删除
[root@ubuntu2204 ~]#mc ls minio-cluster
[2023-09-05 11:26:05 CST] 0B mybucket/
三、编程语言API访问¶
https://min.io/docs/minio/linux/developers/minio-drivers.html

3.1 Python 访问¶
https://min.io/docs/minio/linux/developers/minio-drivers.html#python-sdk
https://min.io/docs/minio/linux/developers/python/minio-py.html
https://github.com/minio/minio-py/tree/master/examples
范例:
[root@ubuntu2204 ~]#apt update && apt -y install python3-pip
[root@ubuntu2204 ~]#python3 -m pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
[root@ubuntu2404 ~]#pip3 install minio --break-system-packages
[root@ubuntu2204 ~]#pip3 install minio
#使用以下代码作为示例来访问 MinIO 服务器
[root@ubuntu2204 ~]#cat access_minio.py
#!/usr/bin/python3
import os
from minio import Minio
from minio.error import S3Error
#from minio.error import (ResponseError, BucketAlreadyOwnedByYou, BucketAlreadyExists)
# 初始化MinIO客户端
minio_client = Minio(
endpoint='localhost:9000',
access_key="kH3qu9EQdPY6L7Y4bvA4",
secret_key="jC7ravHdJG5Gkre5T9sNrhXECWJF5suNIYkBrxu5",
secure=False # 如果使用SSL,请将此项设置为True
)
bucket_name = "mybucket"
object_name = "example-object.txt"
local_file_path = "/var/log/syslog"
try:
# 检查存储桶是否存在,如果不存在则创建
if not minio_client.bucket_exists(bucket_name):
minio_client.make_bucket(bucket_name)
print(f"Bucket '{bucket_name}' created successfully.")
else:
print(f"Bucket '{bucket_name}' already exists.")
# 上传文件到存储桶
minio_client.fput_object(bucket_name, object_name, local_file_path)
print(f"Successfully uploaded '{local_file_path}' to '{object_name}'.")
except S3Error as e:
print(f"An error occurred: {e}")
# 下载存储桶中的对象
downloaded_file_path = "example-object.txt"
try:
minio_client.fget_object(bucket_name, object_name, downloaded_file_path)
print(f"Successfully downloaded '{object_name}' to '{downloaded_file_path}'.")
except S3Error as e:
print(f"An error occurred while downloading '{object_name}': {e}")
#运行程序
[root@ubuntu2204 ~]#python3 access_minio.py
Bucket 'mybucket' created successfully.
Successfully uploaded '/var/log/syslog' to 'example-object.txt'.
Successfully downloaded 'example-object.txt' to 'example-object.txt'.
#查看存储的数据文件
[root@ubuntu2204 ~]#tree /data/minio/
/data/minio/
└── mybucket
└── example-object.txt
├── 16add02d-b997-49fc-b03e-637856b3c1be
│ └── part.1
└── xl.meta
3 directories, 2 files

3.2 Golang 访问¶
https://min.io/docs/minio/linux/developers/go/minio-go.html
在运行代码之前,确保已经安装了 Go,并且已经启动了一个 MinIO 服务器并获取accessKey和secretKey
注意:要求golang-v1.20以上版本
#示例代码
[root@ubuntu2204 minio-demo]#ls
main.go
[root@ubuntu2204 minio-demo]#cat main.go
package main
import (
"context"
"fmt"
"log"
"github.com/minio/minio-go/v7"
"github.com/minio/minio-go/v7/pkg/credentials"
)
func main() {
endpoint := "localhost:9000"
accessKey := "xCLmTTXFrBGRYCY2eqh7"
secretKey := "SmfdeMiZwRWIfoO4iKwkaGe0scBxDmbQvNWCr1"
useSSL := false
// Initialize minio client
minioClient, err := minio.New(endpoint, &minio.Options{
Creds: credentials.NewStaticV4(accessKey, secretKey, ""),
Secure: useSSL,
})
if err != nil {
log.Fatalln(err)
}
bucketName := "mybucket"
objectName := "example-object.txt"
localFilePath := "/var/log/syslog"
ctx := context.Background()
// Create bucket
err = minioClient.MakeBucket(ctx, bucketName, minio.MakeBucketOptions{})
if err != nil {
exists, errBucketExists := minioClient.BucketExists(ctx, bucketName)
if errBucketExists == nil && exists {
fmt.Printf("Bucket '%s' already exists.\n", bucketName)
} else {
log.Fatalln(err)
}
} else {
fmt.Printf("Created bucket '%s'.\n", bucketName)
}
// Upload file
_, err = minioClient.FPutObject(ctx, bucketName, objectName, localFilePath, minio.PutObjectOptions{})
if err != nil {
log.Fatalln(err)
}
fmt.Printf("Successfully uploaded '%s' to '%s'.\n", localFilePath, objectName)
// Download file
downloadFilePath := "downloaded/file.txt"
err = minioClient.FGetObject(ctx, bucketName, objectName, downloadFilePath, minio.GetObjectOptions{})
if err != nil {
log.Fatalln(err)
}
fmt.Printf("Successfully downloaded '%s' to '%s'.\n", objectName, downloadFilePath)
}
#安装golang,要求go-v1.20以上版本
[root@ubuntu2204 minio-demo]#bash install_go.sh
#配置代理
[root@ubuntu2204 minio-demo]#export GOPROXY=https://goproxy.cn
#初始化模块
[root@ubuntu2204 minio-demo]#go mod init minio-demo
go: creating new go.mod: module minio-demo
#下载依赖
[root@ubuntu2204 minio-demo]#go get github.com/minio/minio-go/v7
#查看文件
[root@ubuntu2204 minio-demo]#ls
go.mod go.sum main.go
#编译
[root@ubuntu2204 minio-demo]#CGO_ENABLED=0 go build -o minio-demo
#运行
[root@ubuntu2204 minio-demo]#./minio-demo
Created bucket 'mybucket'.
Successfully uploaded '/var/log/syslog' to 'example-object.txt'.
Successfully downloaded 'example-object.txt' to 'downloaded/file.txt'.
#查看目录结构
[root@ubuntu2204 minio-demo]#tree
.
├── downloaded
│ └── file.txt
├── go.mod
├── go.sum
├── main.go
└── minio-demo
#对比文件一致性
[root@ubuntu2204 minio-demo]#diff downloaded/file.txt /var/log/syslog
#无输出表示文件完全一致,上传下载成功


3.3 JAVA 访问¶
https://min.io/docs/minio/linux/developers/java/minio-java.html
范例
import io.minio.BucketExistsArgs;
import io.minio.MakeBucketArgs;
import io.minio.MinioClient;
import io.minio.UploadObjectArgs;
import io.minio.errors.MinioException;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
public class FileUploader {
public static void main(String[] args)
throws IOException, NoSuchAlgorithmException, InvalidKeyException {
try {
// 创建 MinIO 客户端(连接官方测试环境)
MinioClient minioClient =
MinioClient.builder()
.endpoint("https://play.min.io")
.credentials("Q3AM3UQ867SPQQA43P2F", "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG")
.build();
// 检查桶是否存在
boolean found =
minioClient.bucketExists(BucketExistsArgs.builder().bucket("asiatrip").build());
if (!found) {
// 不存在则创建桶
minioClient.makeBucket(MakeBucketArgs.builder().bucket("asiatrip").build());
} else {
System.out.println("Bucket 'asiatrip' already exists.");
}
// 上传本地文件到 MinIO
minioClient.uploadObject(
UploadObjectArgs.builder()
.bucket("asiatrip")
.object("asiaphotos-2015.zip")
.filename("/home/user/Photos/asiaphotos.zip")
.build());
System.out.println(
"'/home/user/Photos/asiaphotos.zip' is successfully uploaded as "
+ "object 'asiaphotos-2015.zip' to bucket 'asiatrip'.");
} catch (MinioException e) {
System.out.println("Error occurred: " + e);
System.out.println("HTTP trace: " + e.httpTrace());
}
}
}