如何删除某个文件夹及下面的所有文件呢,没找到文档。
zhangzimuzjq opened this issue · 5 comments
zhangzimuzjq commented
比如某个桶下面有个tmp的文件夹,想删除它及下面的所有文件,该如何操作,求大佬告知。
1171736840 commented
获取对应存储平台,然后 getClient 自行操作,后续版本会增加列出文件功能
zhangzimuzjq commented
好的 可以了
zhangzimuzjq commented
/**
* 删除临时文件 每天夜里3点执行
*/
@Scheduled(cron = "0 0 3 * * ?")
public void deleteTempFile() {
MinioFileStorage minioFileStorage = fileStorageService.getFileStorage();
String bucketName = minioFileStorage.getBucketName();
MinioClient minioClient = minioFileStorage.getClient();
cleanTemporaryDir(TEMP, bucketName, minioClient);
}
/**
* 递归删除临时文件
*
* @param dir
*/
public void cleanTemporaryDir(String dir, String bucketName, MinioClient minioClient) {
if (StringUtils.isBlank(dir) || "/".equals(dir)) {
throw new IllegalArgumentException("非法的删除目录!");
}
try {
Iterable<Result<Item>> list = minioClient.listObjects(ListObjectsArgs.builder()
.bucket(bucketName)
.prefix(dir)
.recursive(false)
.build());
for (Result<Item> itemResult : list) {
Item item = itemResult.get();
String fileName = item.objectName();
if (item.isDir()) {
//目录
cleanTemporaryDir(fileName, bucketName, minioClient);
} else {
minioClient.removeObject(RemoveObjectArgs.builder()
.bucket(bucketName)
.object(fileName)
.build());
}
}
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
1171736840 commented
如果这些文件都是你上传的,可以将上传记录保存到数据库,这样删除更方便更通用
zhangzimuzjq commented
好的👌