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); }
昨夜西风凋碧树,独上高楼,望尽天涯路。

浙公网安备 33010602011771号