加上通过url上传文件-支持下载解析临时授权链接
This commit is contained in:
parent
cfc52e61fc
commit
b3f26b9395
@ -836,10 +836,14 @@ public class FileServiceImpl implements FileService {
|
||||
return Lists.newArrayList();
|
||||
}
|
||||
//构建http入参的对象集合
|
||||
List<SignUrlDownloadResponse> httpUrlResList = this.buildHttpUrlResponse(dto);
|
||||
List<SignUrlDownloadResponse> httpUrlResList = this.buildHttpUrlNotSignResponse(dto);
|
||||
|
||||
List<SignUrlDownloadResponse> httpUrlSignResList = this.buildHttpUrlSignResponse(dto);
|
||||
|
||||
//构建fileKey入参对象集合
|
||||
List<SignUrlDownloadResponse> fileKeyResList = this.buildFileKeyResponse(dto);
|
||||
List<SignUrlDownloadResponse> fileKeyResList = this.buildFileKeyResponse(dto.getFileKeys(), dto.getBizScene());
|
||||
httpUrlResList.addAll(fileKeyResList);
|
||||
httpUrlResList.addAll(httpUrlSignResList);
|
||||
log.info("signUrl download end result = {}, times:{}", JsonUtil.obj2Str(httpUrlResList), System.currentTimeMillis() - start);
|
||||
return httpUrlResList;
|
||||
}
|
||||
@ -847,11 +851,11 @@ public class FileServiceImpl implements FileService {
|
||||
/**
|
||||
* 构建fileKey(非http的入参)的返回对象
|
||||
*/
|
||||
private List<SignUrlDownloadResponse> buildFileKeyResponse(SignUrlDownloadDto dto) {
|
||||
if (CollectionUtil.isEmpty(dto.getFileKeys())) {
|
||||
private List<SignUrlDownloadResponse> buildFileKeyResponse(List<String> fileKeys, String bizScene) {
|
||||
if (CollectionUtil.isEmpty(fileKeys)) {
|
||||
return Lists.newArrayList();
|
||||
}
|
||||
List<String> fileKeyList = dto.getFileKeys().stream().filter(item -> StringUtils.isNoneBlank(item) && !item.startsWith("http")).collect(Collectors.toList());
|
||||
List<String> fileKeyList = fileKeys.stream().filter(item -> StringUtils.isNoneBlank(item) && !item.startsWith("http")).collect(Collectors.toList());
|
||||
if (CollectionUtil.isEmpty(fileKeyList)) {
|
||||
return Lists.newArrayList();
|
||||
}
|
||||
@ -865,7 +869,7 @@ public class FileServiceImpl implements FileService {
|
||||
List<AppChannelBucket> appChannelBucketList = appChannelBucketManager.getByAppChannelBucketNos(fileList.stream().map(File::getAppChannelBucketNo).collect(Collectors.toSet()));
|
||||
Map<String, String> bucketTypeMap = appChannelBucketList.stream().collect(Collectors.toMap(AppChannelBucket::getAppChannelBucketNo, AppChannelBucket::getBucketType, (x, y) -> y));
|
||||
//构建场景集合
|
||||
List<FileBusinessScene> fileBusinessSceneList = fileBusinessSceneManager.queryByBucketNoAndScene(fileList.stream().map(File::getAppChannelBucketNo).collect(Collectors.toSet()), dto.getBizScene());
|
||||
List<FileBusinessScene> fileBusinessSceneList = fileBusinessSceneManager.queryByBucketNoAndScene(fileList.stream().map(File::getAppChannelBucketNo).collect(Collectors.toSet()), bizScene);
|
||||
Map<String, Long> bizSceneExpireMap = fileBusinessSceneList.stream().collect(Collectors.toMap(FileBusinessScene::getAppChannelBucketNo, FileBusinessScene::getDownloadExpiration, (x, y) -> y));
|
||||
//构建返回集合
|
||||
return this.buildFileKeyRespByFile(fileList, bucketTypeMap, bizSceneExpireMap);
|
||||
@ -904,11 +908,11 @@ public class FileServiceImpl implements FileService {
|
||||
/**
|
||||
* 构建http链接(非fileKey入参)返回对象
|
||||
*/
|
||||
private List<SignUrlDownloadResponse> buildHttpUrlResponse(SignUrlDownloadDto dto) {
|
||||
private List<SignUrlDownloadResponse> buildHttpUrlNotSignResponse(SignUrlDownloadDto dto) {
|
||||
if (CollectionUtil.isEmpty(dto.getFileKeys())) {
|
||||
return Lists.newArrayList();
|
||||
}
|
||||
List<String> httpUrlList = dto.getFileKeys().stream().filter(item -> StringUtils.isNoneBlank(item) && item.startsWith("http")).collect(Collectors.toList());
|
||||
List<String> httpUrlList = dto.getFileKeys().stream().filter(item -> StringUtils.isNoneBlank(item) && item.startsWith("http") && !isSignUrl(item)).collect(Collectors.toList());
|
||||
if (CollectionUtil.isEmpty(httpUrlList)) {
|
||||
return Lists.newArrayList();
|
||||
}
|
||||
@ -918,6 +922,73 @@ public class FileServiceImpl implements FileService {
|
||||
.build()).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建http链接(非fileKey入参)返回对象
|
||||
*/
|
||||
private List<SignUrlDownloadResponse> buildHttpUrlSignResponse(SignUrlDownloadDto dto) {
|
||||
if (CollectionUtil.isEmpty(dto.getFileKeys())) {
|
||||
return Lists.newArrayList();
|
||||
}
|
||||
List<String> httpUrlList = dto.getFileKeys().stream().filter(item -> StringUtils.isNoneBlank(item) && item.startsWith("http") && isSignUrl(item)).collect(Collectors.toList());
|
||||
if (CollectionUtil.isEmpty(httpUrlList)) {
|
||||
return Lists.newArrayList();
|
||||
}
|
||||
Map<String, String> map = httpUrlList.stream().collect(Collectors.toMap(item -> item, value -> signUrlToFileKey(value)));
|
||||
if (CollectionUtil.isEmpty(map)) {
|
||||
return httpUrlList.stream().map(item -> SignUrlDownloadResponse.builder().fileKey(item).signUrl(item).build()).collect(Collectors.toList());
|
||||
}
|
||||
List<SignUrlDownloadResponse> responseList = this.buildFileKeyResponse(Lists.newArrayList(map.values()), null);
|
||||
if (CollectionUtil.isEmpty(responseList)) {
|
||||
return httpUrlList.stream().map(item -> SignUrlDownloadResponse.builder().fileKey(item).signUrl(item).build()).collect(Collectors.toList());
|
||||
}
|
||||
Map<String, String > respMap = responseList.stream().collect(Collectors.toMap(item -> item.getFileKey(), value -> value.getSignUrl(), (x,y) -> x));
|
||||
|
||||
return httpUrlList.stream().map(item -> {
|
||||
SignUrlDownloadResponse response = new SignUrlDownloadResponse();
|
||||
response.setFileKey(item);
|
||||
|
||||
String fileKey = map.get(item);
|
||||
if (StringUtils.isNotBlank(fileKey)) {
|
||||
String signUrl = respMap.get(fileKey);
|
||||
if (StringUtils.isNotBlank(signUrl)) {
|
||||
response.setSignUrl(signUrl);
|
||||
} else {
|
||||
response.setSignUrl(item);
|
||||
}
|
||||
} else {
|
||||
response.setSignUrl(item);
|
||||
}
|
||||
return response;
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private String signUrlToFileKey(String signUrl) {
|
||||
if (StringUtils.isBlank(signUrl)) {
|
||||
return StringUtils.EMPTY;
|
||||
}
|
||||
if (signUrl.contains("/") && signUrl.contains("?")) {
|
||||
String fileName = signUrl.substring(signUrl.lastIndexOf("/") + 1, signUrl.indexOf("?"));
|
||||
if (fileName.contains(".")) {
|
||||
return fileName.substring(0, fileName.indexOf("."));
|
||||
}
|
||||
return fileName;
|
||||
}
|
||||
return signUrl;
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否临时授权url
|
||||
*/
|
||||
private boolean isSignUrl(String url) {
|
||||
if (StringUtils.isBlank(url)) {
|
||||
return false;
|
||||
}
|
||||
if (url.toLowerCase().contains("expire")) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 授权给第三方下载-上传
|
||||
*/
|
||||
|
||||
Loading…
Reference in New Issue
Block a user