MinIO上传字节数组(java实现)

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");
    }
}

参考文献:豆包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值