package minio;
import cn.hutool.core.lang.Console;
import io.minio.*;
import io.minio.messages.DeleteError;
import io.minio.messages.DeleteObject;
import io.minio.messages.Item;
import java.util.*;
/**
* minio 工具类,提供上传、下载方法
*/
public class MinioUtil {
private static List<String> illegalFileExtensions = Arrays.asList("exe", "dll");
public static boolean initMinioClient() {
//minioUrl
String minioUrl = "";
//端口
int minioPort = 9000;
String minioAccessKey = "";
String minioSecretKey = "";
//建立minio连接
try {
Constant.minioClient = new MinioClient.Builder().endpoint(minioUrl, minioPort, false).credentials(minioAccessKey
, minioSecretKey).build();
return true;
} catch (Exception e) {
System.out.println("init minio error " + e.getMessage());
return false;
}
}
/**
* 判断bulk桶是否存在
*
* @param bulkName
* @return
*/
public static boolean isBuckExist(String bulkName) {
try {
return Constant.minioClient.bucketExists(BucketExistsArgs.builder().bucket(bulkName).build());
} catch (Exception e) {
System.out.println("bulkname is not exist,error " + e.getMessage());
return false;
}
}
/**
* 上传对象
*
* @param bulkName
* @param objectName
* @param localFilePathName
* @return
*/
public static boolean uploadObject(String bulkName, String objectName, String localFilePathName) {
if (isBuckExist(bulkName)) {
try {
Constant.minioClient.uploadObject(UploadObjectArgs.builder().bucket(bulkName).object(objectName).filename(localFilePathName).build());
return true;
} catch (Exception e) {
System.out.println("minio upload object file error " + e.getMessage());
return false;
}
} else {
return false;
}
}
/**
* 下载对象
*
* @param bulkName
* @param objectName
* @param localFilePathName
* @return
*/
public static boolean downloadObject(String bulkName, String objectName, String localFilePathName) {
if (isBuckExist(bulkName)) {
try {
Constant.minioClient.downloadObject(DownloadObjectArgs.builder().bucket(bulkName).object(objectName).filename(localFilePathName).build());
return true;
} catch (Exception e) {
System.out.println("minio download object file error " + e.getMessage());
return false;
}
} else {
return false;
}
}
public static boolean batchDownload(String bulkName, String localFilePathName) {
String bucketName = bulkName;
try {
// 检查'mybucket'是否存在。
boolean found = Constant.minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
if (found) {
// 列出'my-bucketname'里的对象
Iterable<Result<Item>> myObjects = Constant.minioClient.listObjects(ListObjectsArgs.builder().bucket(bucketName).build());
for (Result<Item> result : myObjects) {
Item item = result.get();
System.out.println(item.lastModified() + ", " + item.size() + ", " + item.objectName());
try {
Constant.minioClient.downloadObject(
DownloadObjectArgs.builder()
.bucket(bucketName)
.object(item.objectName())
.filename(localFilePathName + item.objectName())
.build());
} catch (Exception e) {
Console.log(e.getMessage());
}
}
return true;
}
} catch (Exception e) {
Console.log(e.getMessage());
}
return false;
}
/**
* 获取桶下所有的对象
*
* @param bucketName
* @param prefix
* @param recursive
* @param useVersion1
* @return
*/
public static Iterable<Result<Item>> listObjects(String bucketName, String prefix, boolean recursive, boolean useVersion1) {
try {
// 检查'mybucket'是否存在。
boolean found = isBuckExist(bucketName);
if (found) {
// 列出'my-bucketname'里的对象
Iterable<Result<Item>> myObjects = Constant.minioClient.listObjects(ListObjectsArgs.builder().bucket(bucketName).build());
for (Result<Item> result : myObjects) {
Item item = result.get();
System.out.println(item.lastModified() + ", " + item.size() + ", " + item.objectName());
}
} else {
System.out.println("mybucket does not exist");
}
} catch (Exception e) {
System.out.println("Error occurred: " + e);
}
return null;
}
/**
* 删除对象
*
* @param bulkName
* @param objectName
* @return
*/
public static boolean deleteObject(String bulkName, String objectName) {
if (isBuckExist(bulkName)) {
try {
Constant.minioClient.removeObject(RemoveObjectArgs.builder().bucket(bulkName).object(objectName).build());
return true;
} catch (Exception e) {
System.out.println("minio delete object file error " + e.getMessage());
return false;
}
} else {
return false;
}
}
/**
* 批量删除
*
* @param bucketName
* @param objectNames
* @return
*/
public static boolean removeObjects(String bucketName, List<String> objectNames) {
List<DeleteObject> deleteObjects = new ArrayList<>(objectNames.size());
for (String objectName : objectNames) {
deleteObjects.add(new DeleteObject(objectName));
}
Iterable<Result<DeleteError>> results = Constant.minioClient.removeObjects(
RemoveObjectsArgs.builder()
.bucket(bucketName)
.objects(deleteObjects)
.build()
);
for (Result<DeleteError> result : results) {
DeleteError error = null;
try {
error = result.get();
} catch (Exception e) {
e.printStackTrace();
}
Console.log(
"Error in deleting object " + error.objectName() + "; " + error.message());
}
return true;
}
public static void fileScanSchedule(String bucketName) {
//Calendar这个技术也是基于java的线程去做的
//设置第一次更新的时间点
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 14);//控制小时
calendar.set(Calendar.MINUTE, 40);//控制分钟,
calendar.set(Calendar.SECOND, 0);//控制秒,
//利用java的api Timer来完成一个定时任务
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
// 实现自己的定时任务操作
try {
// 检查'mybucket'是否存在。
boolean found = isBuckExist(bucket