fix: 下载修改

This commit is contained in:
zlg
2024-07-18 13:50:35 +08:00
parent b439cbe2c7
commit 32f258ca42
3 changed files with 18 additions and 11 deletions

View File

@@ -3,7 +3,10 @@ package com.schisandra.oss.application.controller;
import cn.hutool.core.util.ZipUtil; import cn.hutool.core.util.ZipUtil;
import cn.hutool.extra.spring.SpringUtil; import cn.hutool.extra.spring.SpringUtil;
import com.alibaba.fastjson.JSON; 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.google.common.base.Preconditions;
import com.mybatisflex.annotation.RelationOneToMany;
import com.schisandra.oss.application.convert.SchisandraOssMinioDTOConverter; import com.schisandra.oss.application.convert.SchisandraOssMinioDTOConverter;
import com.schisandra.oss.application.convert.SchisandraOssQiniuDTOConverter; import com.schisandra.oss.application.convert.SchisandraOssQiniuDTOConverter;
import com.schisandra.oss.application.dto.SchisandraOssMinioDTO; 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.MinioOssClient;
import com.schisandra.oss.application.oss.core.minio.MinioOssConfiguration; import com.schisandra.oss.application.oss.core.minio.MinioOssConfiguration;
import com.schisandra.oss.common.entity.Result; 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.SchisandraOssAliBO;
import com.schisandra.oss.domain.bo.SchisandraOssMinioBO; import com.schisandra.oss.domain.bo.SchisandraOssMinioBO;
import com.schisandra.oss.domain.redis.RedisUtil; import com.schisandra.oss.domain.redis.RedisUtil;
@@ -28,6 +32,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.ServletOutputStream; import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.net.URLEncoder; import java.net.URLEncoder;
@@ -39,6 +44,7 @@ import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
/** /**
* controller * controller
@@ -59,6 +65,8 @@ public class SchisandraOssMinioController {
@Resource @Resource
RedisUtil redisUtil; RedisUtil redisUtil;
@Resource
CaffeineUtil caffeineUtil;
/** /**
* 根据id返回单条配置信息 * 根据id返回单条配置信息
@@ -193,15 +201,15 @@ public class SchisandraOssMinioController {
String[] path = new String[list.size()]; String[] path = new String[list.size()];
InputStream[] inputStreams = new InputStream[list.size()]; InputStream[] inputStreams = new InputStream[list.size()];
path = list.keySet().toArray(path); path = list.keySet().toArray(path);
inputStreams = list.values().toArray(inputStreams);
//记录用户下载 //记录用户下载
Date date = new Date(); Date date = new Date();
AtomicInteger count = new AtomicInteger(0);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String formattedDate = dateFormat.format(date); String formattedDate = dateFormat.format(date);
list.keySet().forEach(name -> { list.keySet().forEach(name -> {
try { try {
byte[] bytes = StreamUtils.copyToByteArray(list.get(name)); 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); String key = redisUtil.buildKey(USER_OSS_PREFIX, "download", formattedDate, userId, name);
HashMap<Object, Object> map = new HashMap<>(); HashMap<Object, Object> map = new HashMap<>();
map.put("fileName", name); map.put("fileName", name);
@@ -228,6 +236,11 @@ public class SchisandraOssMinioController {
Preconditions.checkNotNull(bucket, "不能为空"); Preconditions.checkNotNull(bucket, "不能为空");
Preconditions.checkNotNull(userId, "不能为空"); Preconditions.checkNotNull(userId, "不能为空");
Preconditions.checkNotNull(filePath, "不能为空"); 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); MinioOssClient bean = SpringUtil.getBean(OssConstant.OssType.MINIO + userId);
bean.getMinioOssConfig().setBucketName(bucket); bean.getMinioOssConfig().setBucketName(bucket);
bean.delete(filePath); bean.delete(filePath);

View File

@@ -163,30 +163,24 @@ public class MinioOssClient implements StandardOssClient {
} }
public HashMap<String,InputStream> getTargetDir(List<String> listObjectsArgs) throws Exception { public HashMap<String,InputStream> getTargetDir(List<String> listObjectsArgs) throws Exception {
HashMap<String,InputStream> list = new HashMap<>(); HashMap<String,InputStream> list = new HashMap<>();
List<WorkerWrapper> wrappers=new ArrayList<>(); List<WorkerWrapper> wrappers=new ArrayList<>();
listObjectsArgs.forEach(args -> { listObjectsArgs.forEach(args -> {
minioClient.listObjects(
ListObjectsArgs.builder().prefix(args).bucket(getBucket()).recursive(true).build()).forEach(r -> {
OssInfo info = new OssInfo();
try { try {
WorkerWrapper wrapper1 = new WorkerWrapper.Builder<String, InputStream>().worker((String dirName, Map<String, WorkerWrapper> allWrappers) -> { WorkerWrapper wrapper1 = new WorkerWrapper.Builder<String, InputStream>().worker((String dirName, Map<String, WorkerWrapper> allWrappers) -> {
try { try {
list.put(dirName,getMinioObject(getBucket(), dirName)); list.put(dirName,getMinioObject(getBucket(), dirName));
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); throw new RuntimeException(e);
} }
return null; return null;
}).param(r.get().objectName()).id(r.get().versionId()).callback((boolean success, String param,WorkResult<InputStream> re)->{ }).param(args).id(args).callback((boolean success, String param,WorkResult<InputStream> re)->{
}).build(); }).build();
wrappers.add(wrapper1); wrappers.add(wrapper1);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
}); });
});
Async.beginWork(3500L,new ThreadPoolExecutor(10, 100, 5L, Async.beginWork(3500L,new ThreadPoolExecutor(10, 100, 5L,
TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>()), wrappers); TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>()), wrappers);
return list; return list;

View File

@@ -102,7 +102,7 @@
<dependency> <dependency>
<groupId>com.github.ben-manes.caffeine</groupId> <groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId> <artifactId>caffeine</artifactId>
<version>3.1.8</version> <version>2.9.3</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>cn.hutool</groupId> <groupId>cn.hutool</groupId>