package xyz.jangle.feishu.test;
import io.minio.BucketExistsArgs;
import io.minio.MakeBucketArgs;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import io.minio.errors.MinioException;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
public class MinioUploadByteArray {
// MinIO 基础配置
private static final String ENDPOINT = "http://192.168.1.1:9000";
private static final String ACCESS_KEY = "admin";
private static final String SECRET_KEY = "12345";
private static final String BUCKET_NAME = "my-filepath"; // 存储桶名称
private final MinioClient minioClient;
public MinioUploadByteArray() {
super();
minioClient = MinioClient.builder()
.endpoint(ENDPOINT)
.credentials(ACCESS_KEY, SECRET_KEY)
.build();
}
/**
* 上传 byte[] 数组到 MinIO
* @param bytes 待上传的字节数组
* @param objectName MinIO 中的对象名称(如 "file/test.txt")
* @param contentType 文件MIME类型(如 "text/plain"、"image/jpeg")
*/
public void uploadByteArrayToMinio(byte[] bytes, String objectName, String contentType) {
try {
// 1. 创建 MinIO 客户端
// MinioClient minioClient = MinioClient.builder()
// .endpoint(ENDPOINT)
// .credentials(ACCESS_KEY, SECRET_KEY)
// .build();
// 2. 检查存储桶是否存在,不存在则创建
if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(BUCKET_NAME).build())) {
minioClient.makeBucket(MakeBucketArgs.builder().bucket(BUCKET_NAME).build());
System.out.println("存储桶 " + BUCKET_NAME + " 创建成功");
}
// 3. 将 byte[] 转为 InputStream(核心步骤)
try (InputStream inputStream = new ByteArrayInputStream(bytes)) {
// 4. 上传字节数组
minioClient.putObject(
PutObjectArgs.builder()
.bucket(BUCKET_NAME)
.object(objectName) // MinIO 中的文件路径/名称
.stream(inputStream, bytes.length, -1) // 字节数组长度为文件大小
.contentType(contentType) // 指定MIME类型
.build()
);
System.out.println("字节数组上传成功!访问路径:" + ENDPOINT + "/" + BUCKET_NAME + "/" + objectName);
}
} catch (MinioException e) {
System.err.println("MinIO 上传失败:" + e.getMessage());
e.printStackTrace();
} catch (Exception e) {
System.err.println("其他异常:" + e.getMessage());
e.printStackTrace();
}
}
// 测试示例
public static void main(String[] args) {
// 示例1:上传文本字节数组
MinioUploadByteArray minioMain = new MinioUploadByteArray();
String content = "Hello MinIO! 这是测试字节数组上传";
byte[] textBytes = content.getBytes(StandardCharsets.UTF_8);
// minioMain.uploadByteArrayToMinio(textBytes, "text/test.txt", "text/plain");
minioMain.uploadByteArrayToMinio(textBytes, "text/test.txt", "application/octet-stream"); //通用类型
// 示例2:上传图片字节数组(假设已从本地文件读取为byte[])
// File file = new File("D:/test.jpg");
// byte[] imageBytes = Files.readAllBytes(file.toPath());
// uploadByteArrayToMinio(imageBytes, "image/test.jpg", "image/jpeg");
}
}
参考文献:豆包
76

被折叠的 条评论
为什么被折叠?



