High Performance Object Storage for AI
译文:MinIO是一个基于Go实现的高性能、兼容S3协议的对象存储
文档
- 项目地址:https://github.com/minio/minio
- 官网地址:https://min.io/
- 文档地址:https://docs.min.io/
- Software Development Kits (SDK)
- 下载地址:https://min.io/download#/docker
启动服务端
使用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
如果自己不想搭建服务,可以直接使用官方提供的测试服务
参数 | 值 |
---|---|
Endpoint | https://play.min.io |
Access Key | Q3AM3UQ867SPQQA43P2F |
Secret Key | zuf+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);