Minio使用

MinIO创建和上传数据

1.启动Minio然后进行登录对应文档

2.创建数据桶



3.创建后找到对应的数据桶,进行图片或文件上传



4.在浏览器里访问上传的图片

  • 访问图片会出现这种情况,这时因为没有开启桶的访问权限
  • 访问图片的地址是Minio地址+图片地址

5.设置桶访问权限

桶的权限共有三个选项,分别是:

  • Private:只允许桶的所有者对该桶进行读写。
  • Public:允许所有人对该桶进行读写。
  • Custom:自定义访问权限。

6.自定义桶的访问权限

若想将权限设置为只允许所有者写,但允许所有人读,就需要自定义访问权限。

自定义访问权限,需要使用一个规定格式的JSON字符串进行描述,具体格式可参考官方文档

7.然后在请求图片就能正常访问了

项目里使用MinIo

MinIO提供了多种语言的SDK供开发者使用,本项目需要用到Java SDK官方文档

1.创建项目,并配置依赖

复制代码
<dependency>
     <groupId>io.minio</groupId>
     <artifactId>minio</artifactId>
     <version>8.5.3</version>
</dependency>

2.编写代码进行测试

复制代码
package com.MyBatis.updataImage;

import io.minio.*;
import io.minio.errors.MinioException;

public class upImage {
    public static void main(String[] args) {
        try {
            // 构造 MinIO Client
            MinioClient minioClient = MinioClient.builder()
                    .endpoint("http://192.168.23.101:9000")// 要填写MinIo的api端口的地址
                    .credentials("minioadmin", "minioadmin")
                    .build();

            String bucketName = "hello-minio";

            // 创建hello-minio桶
            boolean found = minioClient.bucketExists(
                    BucketExistsArgs.builder().bucket(bucketName).build()
            );

            if (!found) {
                // 创建hello-minio桶
                minioClient.makeBucket(
                        MakeBucketArgs.builder().bucket(bucketName).build()
                );

                // 设置数据桶访问权限(使用文本块)
                String policy = """
                        {
                          "Version": "2012-10-17",
                          "Statement": [{
                            "Action": "s3:GetObject",
                            "Effect": "Allow",
                            "Principal": "*",
                            "Resource": "arn:aws:s3:::hello-minio/*"
                          }]
                        }""";

                minioClient.setBucketPolicy(
                        SetBucketPolicyArgs.builder()
                                .bucket(bucketName)
                                .config(policy)
                                .build()
                );
            } else {
                System.out.println("Bucket '" + bucketName + "' already exists.");
            }

            // 上传图片(注意修改文件路径)
            minioClient.uploadObject(
                    UploadObjectArgs.builder()
                            .bucket(bucketName)
                            .object("猫.jpg")  // 上传后的文件名
                            .filename("C:\\Users\\30593\\Desktop\\猫.jpg")
                            .build()
            );
            System.out.println("上传成功");

        } catch (MinioException e) {
            System.out.println("MinIO Error: " + e.getMessage());
            e.printStackTrace();
        } catch (Exception e) {
            System.out.println("Error: " + e.getMessage());
            e.printStackTrace();
        }
    }
}
相关推荐
摇滚侠6 小时前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 12
java·数据库·笔记
川石课堂软件测试6 小时前
学习软件测试需掌握的一些知识
数据库·python·sql·功能测试·网络协议·mysql·http
2501_937767167 小时前
自建 SQL 数据库定时备份踩坑复盘与落地思路
数据库·sql
silvamux_8 小时前
10款模型写种草笔记:可发布性、返工来源与成本数据缺口复盘
java·数据库·笔记
I Am a robert girl10 小时前
从 GameHorizon 拆解多时间尺度游戏评测:数据管线、离线基准与在线回放的三层设计
数据库·游戏·多时间尺度·数据管线·游戏评测·离线基准·在线回放
躺柒10 小时前
读数据安全架构设计与实践17安全架构案例(下)
数据库·安全·零信任·安全架构·防火墙·无边界
SelectDB10 小时前
实时更新排错现场:导入了却查到旧数据,和 FINAL 越加越慢的两条路
大数据·数据库·数据分析
SelectDB11 小时前
拿 Planet 的账单一行行对下来,我总结出三个可自查的校验点
大数据·数据库·数据分析
SelectDB11 小时前
Apache Doris + Vane:让多模态数据进入业务分析
大数据·数据库·数据分析
pjj1985413 小时前
ClickHouse 与 Doris 数据库技术梳理:看懂分析型数据库
数据库·clickhouse