MinIO:基于Go实现的高性能、兼容S3协议的对象存储

High Performance Object Storage for AI

译文:MinIO是一个基于Go实现的高性能、兼容S3协议的对象存储

文档

启动服务端

使用Docker启动minio服务端

docker run \
   -p 9000:9000 \
   -p 9090:9090 \
   --name minio \
   -e "TZ=Asia/Shanghai" \
   -e "MINIO_ROOT_USER=ROOTUSER" \
   -e "MINIO_ROOT_PASSWORD=CHANGEME123" \
   -v $(pwd)/data:/data \
   quay.io/minio/minio server /data \
   --console-address ":9090"

浏览器访问:http://localhost:9090

注意:如果api地址 127.0.0.1:9000 无法正常连接,可以尝试使用localhost:9000

如果自己不想搭建服务,可以直接使用官方提供的测试服务

参数
Endpointhttps://play.min.io
Access KeyQ3AM3UQ867SPQQA43P2F
Secret Keyzuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG

客户端

官方提供了多种语言的客户端

  • .NET (minio-dotnet)
  • Go (minio-go)
  • Haskell (minio-hs)
  • Java (minio-java)
  • JavaScript (minio-js)
  • Python (minio-py)

以Java客户端为例

依赖

<!-- 操作minio的java客户端-->
<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.4.3</version>
</dependency>

Java客户端上传文件示例代码

package com.example.demo;

import io.minio.BucketExistsArgs;
import io.minio.MakeBucketArgs;
import io.minio.MinioClient;
import io.minio.UploadObjectArgs;

public class FileUploader {

    public static void makeSureBucketExists(MinioClient minioClient, String bucketName) throws Exception {
        // 确保 bucketName 存在,否则会报错
        boolean found = minioClient.bucketExists(
                BucketExistsArgs.builder()
                        .bucket(bucketName)
                        .build());
        if (!found) {
            minioClient.makeBucket(
                    MakeBucketArgs.builder()
                            .bucket(bucketName)
                            .build());
        } else {
            System.out.println("Bucket already exists.");
        }
    }

    public static void main(String[] args)
            throws Exception {

        // 客户端
        MinioClient minioClient = MinioClient.builder()
                .endpoint("http://127.0.0.1:9000")
                .credentials("ROOTUSER", "CHANGEME123")
                .build();

        // bucket
        String bucketName = "bucket";

        // 确保bucket存在
        makeSureBucketExists(minioClient, bucketName);

        // 参数
        UploadObjectArgs uploadObjectArgs = UploadObjectArgs.builder()
                .bucket(bucketName)
                .object("demo.txt")
                .filename("demo.txt")
                .build();

        // 上传文件
        minioClient.uploadObject(uploadObjectArgs);

        System.out.println("upload success");
    }
}

可以在浏览器看到刚上传的文件

在这里插入图片描述

直接上传Base64字节流

示例

String imageByte = ""

// base64 转字节流
BASE64Decoder decoder = new BASE64Decoder();

byte[] decode = decoder.decodeBuffer(imageByte);
// 处理数据
for (int i = 0; i < decode.length; ++i) {
    if (decode[i] < 0) {
        decode[i] += 256;
    }
}

InputStream byteArrayInputStream = new ByteArrayInputStream(decode);

// 参数
PutObjectArgs putObjectArgs = PutObjectArgs.builder()
        .bucket(bucketName)
        .stream(byteArrayInputStream, byteArrayInputStream.available(), PutObjectArgs.MAX_PART_SIZE)
        .object(filename)
        .build();

// 上传文件
minioClient.putObject(putObjectArgs);

参考
SpringBoot + minio实现分片上传、秒传、续传
Base64转码后不保存到本地,直接上传minio

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值