先上代码
<!-- minio 依赖 -->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>7.1.0</version>
</dependency>
/**
* 迭代复制指定路径下的所有文件/目录
* @param minioClient MinIo连接
* @param bucketName bucket名称
* @param minIoPath 需要复制的MinIo指定bucket下的路径,为""时即为下载bucket下的所有文件,格式示例:"AA/BB/"
* @param targetPath 复制到的目标路径
* */
public static void iterableCopyOfMinIoPath(MinioClient minioClient, String bucketName, String minIoPath, String targetPath){
try {
if (minioClient.bucketExists(bucketName)){
Iterable<Result<Item>> itemLists =
minioClient.listObjects(ListObjectsArgs.builder().bucket(bucketName).prefix(minIoPath).recursive(false).build());
for (Result<Item> result : itemLists) {
Item item = result.get();
if (item.isDir()){
new File(targetPath+"\\"+bucketName+"\\"+item.objectName()).mkdirs();
iterableCopyOfMinIoPath(minioClient,bucketName,item.objectName(),targetPath);
}else {
InputStream inputStream = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName)
.object(item.objectName()).build());
FileOutputStream fileOutputStream = new FileOutputStream(targetPath+"\\"+bucketName+"\\"+item.objectName());
int index;
byte[] bytes = new byte[1024];
while ((index = inputStream.read(bytes)) != -1) {
fileOutputStream.write(bytes, 0, index);
fileOutputStream.flush();
}
fileOutputStream.close();
inputStream.close();
}
}
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
调用
亲测可用
其中在
Iterable<Result<Item>> itemLists =
minioClient.listObjects(ListObjectsArgs.builder().bucket(bucketName).prefix(minIoPath).recursive(false).build());
中: .prefix(“”)方法添加如"AA/"后,itemLists即可获取到bucketName/AA/目录下的子文件/目录
PS:本人新手菜鸡,具体的就不太懂了
参考文章:Minio 批量下载文件,并压缩文件,使用sftp上传文件_海枯石烂i的博客-CSDN博客_minio 批量下载