fix: 下载修改
This commit is contained in:
@@ -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<Object, Object> 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);
|
||||
|
@@ -163,30 +163,24 @@ public class MinioOssClient implements StandardOssClient {
|
||||
}
|
||||
|
||||
public HashMap<String,InputStream> getTargetDir(List<String> listObjectsArgs) throws Exception {
|
||||
|
||||
HashMap<String,InputStream> list = new HashMap<>();
|
||||
List<WorkerWrapper> 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<String, InputStream>().worker((String dirName, Map<String, WorkerWrapper> 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<InputStream> re)->{
|
||||
}).param(args).id(args).callback((boolean success, String param,WorkResult<InputStream> re)->{
|
||||
}).build();
|
||||
wrappers.add(wrapper1);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
Async.beginWork(3500L,new ThreadPoolExecutor(10, 100, 5L,
|
||||
TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>()), wrappers);
|
||||
return list;
|
||||
|
@@ -102,7 +102,7 @@
|
||||
<dependency>
|
||||
<groupId>com.github.ben-manes.caffeine</groupId>
|
||||
<artifactId>caffeine</artifactId>
|
||||
<version>3.1.8</version>
|
||||
<version>2.9.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cn.hutool</groupId>
|
||||
|
Reference in New Issue
Block a user