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.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);
|
||||||
|
@@ -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;
|
||||||
|
@@ -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>
|
||||||
|
Reference in New Issue
Block a user