From 32f258ca427c9a00a7e8cf5f48be91518475ac59 Mon Sep 17 00:00:00 2001 From: zlg <482370576@qq.com> Date: Thu, 18 Jul 2024 13:50:35 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=B8=8B=E8=BD=BD=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SchisandraOssMinioController.java | 17 +++++++++++++++-- .../oss/core/minio/MinioOssClient.java | 10 ++-------- .../schisandra-cloud-storage-oss-common/pom.xml | 2 +- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/controller/SchisandraOssMinioController.java b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/controller/SchisandraOssMinioController.java index 35382ec..8cc5556 100644 --- a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/controller/SchisandraOssMinioController.java +++ b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/controller/SchisandraOssMinioController.java @@ -3,7 +3,10 @@ package com.schisandra.oss.application.controller; import cn.hutool.core.util.ZipUtil; import cn.hutool.extra.spring.SpringUtil; import com.alibaba.fastjson.JSON; +import com.github.benmanes.caffeine.cache.Cache; +import com.github.benmanes.caffeine.cache.Caffeine; import com.google.common.base.Preconditions; +import com.mybatisflex.annotation.RelationOneToMany; import com.schisandra.oss.application.convert.SchisandraOssMinioDTOConverter; import com.schisandra.oss.application.convert.SchisandraOssQiniuDTOConverter; import com.schisandra.oss.application.dto.SchisandraOssMinioDTO; @@ -12,6 +15,7 @@ import com.schisandra.oss.application.oss.constant.OssConstant; import com.schisandra.oss.application.oss.core.minio.MinioOssClient; import com.schisandra.oss.application.oss.core.minio.MinioOssConfiguration; import com.schisandra.oss.common.entity.Result; +import com.schisandra.oss.common.utils.CaffeineUtil; import com.schisandra.oss.domain.bo.SchisandraOssAliBO; import com.schisandra.oss.domain.bo.SchisandraOssMinioBO; import com.schisandra.oss.domain.redis.RedisUtil; @@ -28,6 +32,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; +import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; @@ -39,6 +44,7 @@ import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; /** * controller @@ -59,6 +65,8 @@ public class SchisandraOssMinioController { @Resource RedisUtil redisUtil; + @Resource + CaffeineUtil caffeineUtil; /** * 根据id返回单条配置信息 @@ -193,15 +201,15 @@ public class SchisandraOssMinioController { String[] path = new String[list.size()]; InputStream[] inputStreams = new InputStream[list.size()]; path = list.keySet().toArray(path); - inputStreams = list.values().toArray(inputStreams); //记录用户下载 Date date = new Date(); + AtomicInteger count = new AtomicInteger(0); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); String formattedDate = dateFormat.format(date); list.keySet().forEach(name -> { try { byte[] bytes = StreamUtils.copyToByteArray(list.get(name)); - list.get(name).reset(); + inputStreams[count.get()] = new ByteArrayInputStream(bytes); String key = redisUtil.buildKey(USER_OSS_PREFIX, "download", formattedDate, userId, name); HashMap map = new HashMap<>(); map.put("fileName", name); @@ -228,6 +236,11 @@ public class SchisandraOssMinioController { Preconditions.checkNotNull(bucket, "不能为空"); Preconditions.checkNotNull(userId, "不能为空"); Preconditions.checkNotNull(filePath, "不能为空"); + int index=filePath.lastIndexOf("/"); + String fileName = filePath.substring(index + 1); + + System.out.println(caffeineUtil.caffeineUtil().getIfPresent("MinioListDir" + userId + bucket + fileName)); + caffeineUtil.caffeineUtil().invalidate("MinioListDir" + userId + bucket + fileName); MinioOssClient bean = SpringUtil.getBean(OssConstant.OssType.MINIO + userId); bean.getMinioOssConfig().setBucketName(bucket); bean.delete(filePath); diff --git a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/minio/MinioOssClient.java b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/minio/MinioOssClient.java index 26efa2e..ac9a0eb 100644 --- a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/minio/MinioOssClient.java +++ b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-application/schisandra-cloud-storage-oss-application-controller/src/main/java/com/schisandra/oss/application/oss/core/minio/MinioOssClient.java @@ -163,30 +163,24 @@ public class MinioOssClient implements StandardOssClient { } public HashMap getTargetDir(List listObjectsArgs) throws Exception { - HashMap list = new HashMap<>(); List wrappers=new ArrayList<>(); listObjectsArgs.forEach(args -> { - minioClient.listObjects( - ListObjectsArgs.builder().prefix(args).bucket(getBucket()).recursive(true).build()).forEach(r -> { - OssInfo info = new OssInfo(); try { WorkerWrapper wrapper1 = new WorkerWrapper.Builder().worker((String dirName, Map allWrappers) -> { try { list.put(dirName,getMinioObject(getBucket(), dirName)); } catch (Exception e) { - e.printStackTrace(); + throw new RuntimeException(e); } return null; - }).param(r.get().objectName()).id(r.get().versionId()).callback((boolean success, String param,WorkResult re)->{ + }).param(args).id(args).callback((boolean success, String param,WorkResult re)->{ }).build(); wrappers.add(wrapper1); } catch (Exception e) { e.printStackTrace(); } }); - }); - Async.beginWork(3500L,new ThreadPoolExecutor(10, 100, 5L, TimeUnit.SECONDS, new LinkedBlockingQueue()), wrappers); return list; diff --git a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-common/pom.xml b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-common/pom.xml index 4fc2122..5bbe028 100644 --- a/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-common/pom.xml +++ b/schisandra-cloud-storage-oss/schisandra-cloud-storage-oss-common/pom.xml @@ -102,7 +102,7 @@ com.github.ben-manes.caffeine caffeine - 3.1.8 + 2.9.3 cn.hutool