跳转至

Minio

MinIO 是一个高性能、兼容 Amazon S3 协议的分布式对象存储系统。


Docker 安装

mkdir -p ~/minio/data

docker run \
   -p 9000:9000 \
   -p 9001:9001 \
   --name minio \
   -v ~/minio/data:/data \
   -e "MINIO_ROOT_USER=minioadmin" \
   -e "MINIO_ROOT_PASSWORD=minioadmin" \
   quay.io/minio/minio server /data --console-address ":9001"
参数 说明
-p 9000 API 端口,SDK 连接用
-p 9001 Console 端口,浏览器管理页面
-v ~/minio/data:/data 数据持久化,容器重启不丢失
MINIO_ROOT_USER 管理员用户名
MINIO_ROOT_PASSWORD 管理员密码

完整文档:MinIO 官方安装指南

启动后浏览器访问 http://127.0.0.1:9001 即可进入管理控制台。


核心概念

概念 说明
Bucket(桶) 对象的命名空间,类似文件夹
Object(对象) 实际的数据单元,如图片、文件
Endpoint MinIO 服务器的网络地址,如 http://127.0.0.1:9000
Access Key 相当于用户名,标识访问者身份
Secret Key 相当于密码,验证访问者身份

访问权限

Bucket 有三种访问模式:

  • Private:只有所有者可以读写(默认)
  • Public:所有人可读写
  • Custom:自定义权限策略(JSON)

最常见的场景是:允许所有人读,只有所有者写。自定义策略示例:

{
  "Statement": [
    {
      "Action": "s3:GetObject",
      "Effect": "Allow",
      "Principal": "*",
      "Resource": "arn:aws:s3:::your-bucket-name/*"
    }
  ],
  "Version": "2012-10-17"
}

your-bucket-name 替换成实际的桶名即可。完整权限文档:Policy-Based Access Control


Java SDK

官方文档:MinIO Java SDK

依赖

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

快速示例

import io.minio.*;

public class MinioDemo {
    public static void main(String[] args) throws Exception {
        // 1. 连接
        MinioClient client = MinioClient.builder()
                .endpoint("http://127.0.0.1:9000")
                .credentials("minioadmin", "minioadmin")
                .build();

        // 2. 创建桶(不存在时)
        String bucket = "my-bucket";
        boolean found = client.bucketExists(BucketExistsArgs.builder()
                .bucket(bucket).build());
        if (!found) {
            client.makeBucket(MakeBucketArgs.builder().bucket(bucket).build());
        }

        // 3. 上传文件
        client.uploadObject(UploadObjectArgs.builder()
                .bucket(bucket)
                .object("test.png")
                .filename("C:\\Users\\test\\Pictures\\1.png")
                .build());

        // 4. 下载文件
        client.downloadObject(DownloadObjectArgs.builder()
                .bucket(bucket)
                .object("test.png")
                .filename("C:\\Users\\test\\Downloads\\test.png")
                .build());
    }
}

Python SDK

官方文档:MinIO Python SDK

安装

pip install minio

快速示例

from minio import Minio
from minio.error import S3Error

# 1. 连接
client = Minio(
    "127.0.0.1:9000",
    access_key="minioadmin",
    secret_key="minioadmin",
    secure=False  # HTTP 设为 False,HTTPS 设为 True
)

bucket = "my-bucket"

# 2. 创建桶(不存在时)
found = client.bucket_exists(bucket)
if not found:
    client.make_bucket(bucket)

# 3. 上传文件
client.fput_object(
    bucket_name=bucket,
    object_name="test.png",
    file_path="/path/to/local/test.png"
)

# 4. 下载文件
client.fget_object(
    bucket_name=bucket,
    object_name="test.png",
    file_path="/path/to/save/test.png"
)