Skip to content

Commit

Permalink
Merge pull request #96 from zflzqy/dev_zflzqy
Browse files Browse the repository at this point in the history
fix 优化七牛云和minio批量操作文件
  • Loading branch information
moxi624 authored Mar 26, 2023
2 parents 66ee459 + 5c02f6c commit 1eec089
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,16 @@
import com.moxi.mogublog.utils.FileUtils;
import com.moxi.mogublog.utils.ResultUtil;
import com.moxi.mougblog.base.global.Constants;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import io.minio.RemoveObjectArgs;
import io.minio.*;
import io.minio.messages.DeleteObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

/**
Expand Down Expand Up @@ -89,10 +89,11 @@ public String deleteBatchFile(List<String> fileNameList) {
SystemConfig systemConfig = feignUtil.getSystemConfig();
MinioClient minioClient = MinioClient.builder().endpoint(systemConfig.getMinioEndPoint()).credentials(systemConfig.getMinioAccessKey(), systemConfig.getMinioSecretKey()).build();
try {
List<DeleteObject> objects = new LinkedList<>();
for (String fileName : fileNameList) {
minioClient.removeObject(
RemoveObjectArgs.builder().bucket(systemConfig.getMinioBucket()).object(fileName).build());
objects.add(new DeleteObject(fileName));
}
minioClient.removeObjects(RemoveObjectsArgs.builder().bucket(systemConfig.getMinioBucket()).objects(objects).build());
} catch (Exception e) {
log.error("批量删除文件失败, 错误消息: {}", e.getMessage());
return ResultUtil.errorWithData(MessageConf.DELETE_DEFAULT_ERROR);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.moxi.mogublog.picture.util;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ArrayUtil;
import com.google.gson.Gson;
import com.moxi.mogublog.commons.entity.SystemConfig;
import com.moxi.mogublog.picture.global.MessageConf;
Expand Down Expand Up @@ -27,9 +29,7 @@

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;

/**
* 七牛云工具类
Expand Down Expand Up @@ -133,25 +133,45 @@ public int deleteFile(String fileName, Map<String, String> qiNiuConfig) {
* @return
*/
public Boolean deleteFileList(List<String> fileNameList, Map<String, String> qiNiuConfig) {
if (CollUtil.isEmpty(fileNameList)){
return true;
}
//构造一个带指定Zone对象的配置类
Configuration cfg = setQiNiuArea(qiNiuConfig.get(SysConf.QI_NIU_AREA));
//获取上传凭证
String accessKey = qiNiuConfig.get(SysConf.QI_NIU_ACCESS_KEY);
String secretKey = qiNiuConfig.get(SysConf.QI_NIU_SECRET_KEY);
String bucket = qiNiuConfig.get(SysConf.QI_NIU_BUCKET);
int successCount = 0;
for (String fileName : fileNameList) {
String key = fileName;
Auth auth = Auth.create(accessKey, secretKey);
BucketManager bucketManager = new BucketManager(auth, cfg);
try {
Response delete = bucketManager.delete(bucket, key);
log.info("{七牛云文件 {} 删除成功", fileName);
successCount += 1;
} catch (QiniuException ex) {
//如果遇到异常,说明删除失败
log.error(ex.getMessage());

Auth auth = Auth.create(accessKey, secretKey);
BucketManager bucketManager = new BucketManager(auth, cfg);

try {
List<String> deleteObjects = new LinkedList<>();
for (String fileName:fileNameList){
deleteObjects.add(fileName);
// 七牛云规定不超过1000
if (deleteObjects.size()==999){
// 构建批量删除项
BucketManager.BatchOperations batchOperations = new BucketManager.BatchOperations();
batchOperations.addDeleteOp(bucket, ArrayUtil.toArray(deleteObjects,String.class));
bucketManager.batch(batchOperations);
log.info("{七牛云文件 {} 删除成功", deleteObjects);
deleteObjects = new LinkedList<>();
}
}

// 删除剩下的部分
if (CollUtil.isNotEmpty(deleteObjects)){
BucketManager.BatchOperations batchOperations = new BucketManager.BatchOperations();
batchOperations.addDeleteOp(bucket, ArrayUtil.toArray(deleteObjects,String.class));
bucketManager.batch(batchOperations);
log.info("{七牛云文件 {} 删除成功", deleteObjects);
}
} catch (QiniuException e) {
//如果遇到异常,说明删除失败
log.error("删除失败:",e);
}
return successCount == fileNameList.size();
}
Expand Down

0 comments on commit 1eec089

Please sign in to comment.