java minio服务之间进行传输

最近接到一个大活,分布式存储minio集群文件服务开发,在此记录开发学习历程 

1.两个minio服务进行同步传输,此处只记录核心逻辑

    /**
     * 验证服务是否登录
     *
     * @param url       路径
     * @param accessKey 账号
     * @param secretKey 密码
     * @return
     */
    public static final MinioClient getClient(String url, String accessKey, String secretKey) {
        return MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).build();
    }

    /**
     * 文件流下载
     * @param client
     * @param bucketCode
     * @param objectCode
     * @return
     */
    @SneakyThrows
    public static InputStream downloadFile(MinioClient client, String bucketCode, String objectCode) {
        return client.getObject(GetObjectArgs
            .builder()
            .bucket(bucketCode)
            .object(objectCode)
            .build());
    }

    /**
     * 并且验证存储桶是否存在 不存在创建存储桶
     *
     * @param client
     */
    public static final void checkOrMakeBucket(MinioClient client,String bucketName) {
        try {
            boolean exists = client.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
            // 验证桶存在  不存在创建桶
            if (!exists) {
                client.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
            }
        } catch (Exception e) {
            // 存储服务连接失败!
            throw new I18nException(I18N_MSG, 50000001);
        }
    }

    /**
     * 上传minio文件
     *
     * @param client
     * @param bucketCode
     * @param objectId
     * @param fileStream
     * @param contentType
     */
    @SneakyThrows
    public static void createFile(MinioClient client, String bucketCode, String objectId, InputStream fileStream, String contentType) {
        client.putObject(PutObjectArgs
            .builder()
            .bucket(bucketCode)
            .object(objectId)
            .stream(fileStream, fileStream.available(), -1)
            .contentType(contentType).build());
    }

    public static void main(String[] args) {
        // 第一个minio服务登录
        MinioClient oldClient = FileOptionUtils.getClient(oldStorage.getAccAddress(),oldStorage.getAccUser(),oldStorage.getAccPwd());
        // 拿到文件流
        InputStream oldInputStream = FileOptionUtils.downloadFile(oldClient, object.getBucketCode(), object.getObjectCode());
        // 第二个minio服务
        MinioClient newClient = FileOptionUtils.getClient(newStorage.getAccAddress(),newStorage.getAccUser(),newStorage.getAccPwd());
        // 检查是否存在桶信息 不存在创建
        FileOptionUtils.checkOrMakeBucket(newClient,object.getBucketCode());
        // 对下载的文件流进行转换
        ByteArrayOutputStream bs = new ByteArrayOutputStream();
        IoUtil.copy(oldInputStream,bs);
        oldInputStream = new ByteArrayInputStream(bs.toByteArray());
        // 文件上传
        FileOptionUtils.createFile(newClient,object.getBucketCode(),object.getObjectCode(),oldInputStream,contentType);
    }

 

posted @ 2022-03-23 10:29  你造吗  阅读(820)  评论(0)    收藏  举报