公司要求再minio上的数据迁移至内网阿里云
先实现第一步批量下载minio的数据到本地
- 依赖
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>7.1.0</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.2</version>
</dependency>
/**
* 批量下载工具 Minio
*
* @author 少油少盐我养生
* @date 2023/07/31 10:28 上午
*/
public class BatchDownloadUtil {
private static final String ENDPOINT = "minio地址+端口";//minio地址+端口
private static final String ACCESS_KEY = "账号";//minio 账号
private static final String SECRET_KEY = "密码";//minio 密码
private static final String BUCKET_NAME = "rlzytxpjmin";//minio的桶名称
private static final String ROOT_PATH = "桶内路径";//桶内路径不含桶
private static final String LOCAL_DIR = "下载到的地址";//下载到的地址
static MinioClient minioClient = MinioClient.builder().endpoint(ENDPOINT).credentials(ACCESS_KEY, SECRET_KEY).build();
public static void main(String[] args) throws Exception {
ListObjectsArgs listObjectsArgs = ListObjectsArgs.builder().bucket(BUCKET_NAME).prefix(ROOT_PATH).build();
findAndSaveFile(listObjectsArgs);
}
private static void findAndSaveFile(ListObjectsArgs listObjectsArgs) throws Exception {
// List all objects in the bucket
Iterable<Result<Item>> results = minioClient.listObjects(listObjectsArgs);
for (Result<Item> result : results) {
Item item = result.get();
if (item.isDir()) {
System.out.println("文件夹:" + URLDecoder.decode(item.objectName(),"UTF-8") );//输出日志
ListObjectsArgs args = ListObjectsArgs.builder().bucket(BUCKET_NAME).prefix(item.objectName()).build();
findAndSaveFile(args);
} else {
GetObjectArgs getObjectArgs = GetObjectArgs.builder().bucket(BUCKET_NAME).object(URLDecoder.decode(item.objectName())).build();
String objectName =URLDecoder.decode(item.objectName(),"UTF-8");
// Create a local file with the same name as the object
File file = new File(LOCAL_DIR + File.separator + objectName);
// Create parent directories if needed
file.getParentFile().mkdirs();
// Get the object as an input stream
try (InputStream stream = minioClient.getObject(getObjectArgs)) {
// Copy the input stream to the file
FileUtils.copyInputStreamToFile(stream, file);
}
System.out.printf("文件:%s 下载成功!\n", URLDecoder.decode(item.objectName()));//输出日志
}
}
}
}
文章引用了【Java】对Minio指定Bucket大量文件的批量下载与本地文件夹的批量上传的代码 修改了其中的字符集问题