diff --git a/src/main/java/im/zhaojun/zfile/service/base/AbstractS3BaseFileService.java b/src/main/java/im/zhaojun/zfile/service/base/AbstractS3BaseFileService.java index 88dd0ac..d28c9fb 100644 --- a/src/main/java/im/zhaojun/zfile/service/base/AbstractS3BaseFileService.java +++ b/src/main/java/im/zhaojun/zfile/service/base/AbstractS3BaseFileService.java @@ -73,7 +73,11 @@ public abstract class AbstractS3BaseFileService extends AbstractBaseFileService fileItemDTO.setTime(s.getLastModified()); fileItemDTO.setType(FileTypeEnum.FILE); fileItemDTO.setPath(path); - fileItemDTO.setUrl(getDownloadUrl(StringUtils.concatUrl(path, fileItemDTO.getName()))); + + String fullPathAndName = StringUtils.concatUrl(path, fileItemDTO.getName()); + String directlink = StringUtils.generatorLink(driveId, fullPathAndName); + fileItemDTO.setUrl(directlink); + fileItemList.add(fileItemDTO); } @@ -129,6 +133,7 @@ public abstract class AbstractS3BaseFileService extends AbstractBaseFileService for (FileItemDTO fileItemDTO : list) { String fullPath = StringUtils.concatUrl(fileItemDTO.getPath(), fileItemDTO.getName()); if (Objects.equals(fullPath, path)) { + fileItemDTO.setUrl(getDownloadUrl(path)); return fileItemDTO; } } diff --git a/src/main/java/im/zhaojun/zfile/util/StringUtils.java b/src/main/java/im/zhaojun/zfile/util/StringUtils.java index 677cbbc..b6a3233 100644 --- a/src/main/java/im/zhaojun/zfile/util/StringUtils.java +++ b/src/main/java/im/zhaojun/zfile/util/StringUtils.java @@ -3,6 +3,7 @@ package im.zhaojun.zfile.util; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.URLUtil; import im.zhaojun.zfile.model.constant.ZFileConstant; +import im.zhaojun.zfile.service.SystemConfigService; /** * @author zhaojun @@ -114,4 +115,32 @@ public class StringUtils { public static String replaceHost(String originUrl, String replaceHost) { return concatPath(replaceHost, URLUtil.getPath(originUrl)); } + + /** + * 拼接 URL,并去除重复的分隔符 '/',但不会影响 http:// 和 https:// 这种头部 + * @param strs 拼接的字符数组 + * @return 拼接结果 + */ + public static String concatUrl(String... strs) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < strs.length; i++) { + sb.append(strs[i]); + if (i != strs.length - 1) { + sb.append(DELIMITER); + } + } + return removeDuplicateSeparator(sb.toString()); + } + + /** + * 拼接文件直链生成 URL + * @param driveId 驱动器 ID + * @param fullPath 文件全路径 + * @return 生成结果 + */ + public static String generatorLink(Integer driveId, String fullPath) { + SystemConfigService systemConfigService = SpringContextHolder.getBean(SystemConfigService.class); + String domain = systemConfigService.getDomain(); + return concatUrl(domain, "directlink", String.valueOf(driveId), fullPath); + } }