From fb0d9721aa1694e336beae0d45eea84aa32dd170 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E4=BF=8A?= <873019219@qq.com> Date: Sat, 10 Apr 2021 15:38:16 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20OneDrive=20=E5=92=8C=20SharePoint?= =?UTF-8?q?=20=E5=8F=8D=E4=BB=A3=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zfile/model/constant/StorageConfigConstant.java | 2 ++ .../zfile/model/dto/StorageStrategyConfig.java | 2 ++ .../service/base/AbstractOneDriveServiceBase.java | 1 + .../service/base/AbstractSharePointServiceBase.java | 1 + .../service/base/MicrosoftDriveServiceBase.java | 13 ++++++------- .../service/impl/OneDriveChinaServiceImpl.java | 5 +++++ .../zfile/service/impl/OneDriveServiceImpl.java | 4 ++++ .../service/impl/SharePointChinaServiceImpl.java | 4 ++++ .../zfile/service/impl/SharePointServiceImpl.java | 4 ++++ .../java/im/zhaojun/zfile/util/StringUtils.java | 13 +++++++++++++ 10 files changed, 42 insertions(+), 7 deletions(-) diff --git a/src/main/java/im/zhaojun/zfile/model/constant/StorageConfigConstant.java b/src/main/java/im/zhaojun/zfile/model/constant/StorageConfigConstant.java index 5fe5084..85b8501 100644 --- a/src/main/java/im/zhaojun/zfile/model/constant/StorageConfigConstant.java +++ b/src/main/java/im/zhaojun/zfile/model/constant/StorageConfigConstant.java @@ -41,4 +41,6 @@ public class StorageConfigConstant { public static final String IS_PRIVATE = "isPrivate"; + public static final String PROXY_DOMAIN = "proxyDomain"; + } \ No newline at end of file diff --git a/src/main/java/im/zhaojun/zfile/model/dto/StorageStrategyConfig.java b/src/main/java/im/zhaojun/zfile/model/dto/StorageStrategyConfig.java index 8a588f5..17a2cce 100644 --- a/src/main/java/im/zhaojun/zfile/model/dto/StorageStrategyConfig.java +++ b/src/main/java/im/zhaojun/zfile/model/dto/StorageStrategyConfig.java @@ -46,4 +46,6 @@ public class StorageStrategyConfig { private String siteType; + private String proxyDomain; + } \ No newline at end of file diff --git a/src/main/java/im/zhaojun/zfile/service/base/AbstractOneDriveServiceBase.java b/src/main/java/im/zhaojun/zfile/service/base/AbstractOneDriveServiceBase.java index 104c94a..542b9b1 100644 --- a/src/main/java/im/zhaojun/zfile/service/base/AbstractOneDriveServiceBase.java +++ b/src/main/java/im/zhaojun/zfile/service/base/AbstractOneDriveServiceBase.java @@ -29,6 +29,7 @@ public abstract class AbstractOneDriveServiceBase extends MicrosoftDriveServiceB add(new StorageConfig("accessToken", "访问令牌")); add(new StorageConfig("refreshToken", "刷新令牌")); add(new StorageConfig("basePath", "基路径")); + add(new StorageConfig("proxyDomain", "反代域名")); }}; } } \ No newline at end of file diff --git a/src/main/java/im/zhaojun/zfile/service/base/AbstractSharePointServiceBase.java b/src/main/java/im/zhaojun/zfile/service/base/AbstractSharePointServiceBase.java index 7ef6665..ba435b9 100644 --- a/src/main/java/im/zhaojun/zfile/service/base/AbstractSharePointServiceBase.java +++ b/src/main/java/im/zhaojun/zfile/service/base/AbstractSharePointServiceBase.java @@ -24,6 +24,7 @@ public abstract class AbstractSharePointServiceBase extends MicrosoftDriveServic return new ArrayList() {{ add(new StorageConfig("accessToken", "访问令牌")); add(new StorageConfig("refreshToken", "刷新令牌")); + add(new StorageConfig("proxyDomain", "反代域名")); add(new StorageConfig("basePath", "基路径")); add(new StorageConfig("siteName", "站点名称")); add(new StorageConfig("siteId", "SiteId")); diff --git a/src/main/java/im/zhaojun/zfile/service/base/MicrosoftDriveServiceBase.java b/src/main/java/im/zhaojun/zfile/service/base/MicrosoftDriveServiceBase.java index acda092..b6734f8 100644 --- a/src/main/java/im/zhaojun/zfile/service/base/MicrosoftDriveServiceBase.java +++ b/src/main/java/im/zhaojun/zfile/service/base/MicrosoftDriveServiceBase.java @@ -32,12 +32,6 @@ import java.util.List; @Slf4j public abstract class MicrosoftDriveServiceBase extends AbstractBaseFileService { - - /** - * https://graph.microsoft.com/v1.0/drives/6e4cf6d2f7e15197/root:%2FData%2F%E5%B8%A6%E6%9C%89%E7%AC%A6%E5%8F%B7%E6%96%87%E4%BB%B6%E5%A4%B9%E6%B5%8B%E8%AF%95%2F%25100+%2520:/children - * https://graph.microsoft.com/v1.0/me/drive/root:%2FData%2F%E5%B8%A6%E6%9C%89%E7%AC%A6%E5%8F%B7%E6%96%87%E4%BB%B6%E5%A4%B9%E6%B5%8B%E8%AF%95%2F%25100+%2520:/children - */ - /** * 获取根文件 API URI */ @@ -63,6 +57,7 @@ public abstract class MicrosoftDriveServiceBase extends AbstractBaseFileService */ private static final String ONE_DRIVE_FILE_FLAG = "file"; + protected String proxyDomain; @Resource @Lazy @@ -174,7 +169,11 @@ public abstract class MicrosoftDriveServiceBase extends AbstractBaseFileService fileItemDTO.setTime(fileItem.getDate("lastModifiedDateTime")); if (fileItem.containsKey("file")) { - fileItemDTO.setUrl(fileItem.getString("@microsoft.graph.downloadUrl")); + String originUrl = fileItem.getString("@microsoft.graph.downloadUrl"); + if (StringUtils.isNotNullOrEmpty(proxyDomain)) { + originUrl = StringUtils.replaceHost(originUrl, proxyDomain); + } + fileItemDTO.setUrl(originUrl); fileItemDTO.setType(FileTypeEnum.FILE); } else { fileItemDTO.setType(FileTypeEnum.FOLDER); diff --git a/src/main/java/im/zhaojun/zfile/service/impl/OneDriveChinaServiceImpl.java b/src/main/java/im/zhaojun/zfile/service/impl/OneDriveChinaServiceImpl.java index eb18af9..66dad65 100644 --- a/src/main/java/im/zhaojun/zfile/service/impl/OneDriveChinaServiceImpl.java +++ b/src/main/java/im/zhaojun/zfile/service/impl/OneDriveChinaServiceImpl.java @@ -47,6 +47,11 @@ public class OneDriveChinaServiceImpl extends AbstractOneDriveServiceBase implem String accessToken = stringStorageConfigMap.get(StorageConfigConstant.ACCESS_TOKEN_KEY).getValue(); String refreshToken = stringStorageConfigMap.get(StorageConfigConstant.REFRESH_TOKEN_KEY).getValue(); super.basePath = stringStorageConfigMap.get(StorageConfigConstant.BASE_PATH).getValue(); + StorageConfig proxyDomainStorageConfig = stringStorageConfigMap.get(StorageConfigConstant.PROXY_DOMAIN); + if (proxyDomainStorageConfig != null) { + super.proxyDomain = proxyDomainStorageConfig.getValue(); + } + if (StringUtils.isEmpty(accessToken) || StringUtils.isEmpty(refreshToken)) { log.debug("初始化存储策略 [{}] 失败: 参数不完整", getStorageTypeEnum().getDescription()); diff --git a/src/main/java/im/zhaojun/zfile/service/impl/OneDriveServiceImpl.java b/src/main/java/im/zhaojun/zfile/service/impl/OneDriveServiceImpl.java index 08445d1..4188871 100644 --- a/src/main/java/im/zhaojun/zfile/service/impl/OneDriveServiceImpl.java +++ b/src/main/java/im/zhaojun/zfile/service/impl/OneDriveServiceImpl.java @@ -47,6 +47,10 @@ public class OneDriveServiceImpl extends AbstractOneDriveServiceBase implements String accessToken = stringStorageConfigMap.get(StorageConfigConstant.ACCESS_TOKEN_KEY).getValue(); String refreshToken = stringStorageConfigMap.get(StorageConfigConstant.REFRESH_TOKEN_KEY).getValue(); super.basePath = stringStorageConfigMap.get(StorageConfigConstant.BASE_PATH).getValue(); + StorageConfig proxyDomainStorageConfig = stringStorageConfigMap.get(StorageConfigConstant.PROXY_DOMAIN); + if (proxyDomainStorageConfig != null) { + super.proxyDomain = proxyDomainStorageConfig.getValue(); + } if (StringUtils.isEmpty(accessToken) || StringUtils.isEmpty(refreshToken)) { log.debug("初始化存储策略 [{}] 失败: 参数不完整", getStorageTypeEnum().getDescription()); diff --git a/src/main/java/im/zhaojun/zfile/service/impl/SharePointChinaServiceImpl.java b/src/main/java/im/zhaojun/zfile/service/impl/SharePointChinaServiceImpl.java index 8aa8721..2804c40 100644 --- a/src/main/java/im/zhaojun/zfile/service/impl/SharePointChinaServiceImpl.java +++ b/src/main/java/im/zhaojun/zfile/service/impl/SharePointChinaServiceImpl.java @@ -48,6 +48,10 @@ public class SharePointChinaServiceImpl extends AbstractSharePointServiceBase im String refreshToken = stringStorageConfigMap.get(StorageConfigConstant.REFRESH_TOKEN_KEY).getValue(); super.siteId = stringStorageConfigMap.get(StorageConfigConstant.SHAREPOINT_SITE_ID).getValue(); super.basePath = stringStorageConfigMap.get(StorageConfigConstant.BASE_PATH).getValue(); + StorageConfig proxyDomainStorageConfig = stringStorageConfigMap.get(StorageConfigConstant.PROXY_DOMAIN); + if (proxyDomainStorageConfig != null) { + super.proxyDomain = proxyDomainStorageConfig.getValue(); + } if (StringUtils.isEmpty(accessToken) || StringUtils.isEmpty(refreshToken)) { log.debug("初始化存储策略 [{}] 失败: 参数不完整", getStorageTypeEnum().getDescription()); diff --git a/src/main/java/im/zhaojun/zfile/service/impl/SharePointServiceImpl.java b/src/main/java/im/zhaojun/zfile/service/impl/SharePointServiceImpl.java index 3ef8a7a..099c530 100644 --- a/src/main/java/im/zhaojun/zfile/service/impl/SharePointServiceImpl.java +++ b/src/main/java/im/zhaojun/zfile/service/impl/SharePointServiceImpl.java @@ -48,6 +48,10 @@ public class SharePointServiceImpl extends AbstractSharePointServiceBase impleme String refreshToken = stringStorageConfigMap.get(StorageConfigConstant.REFRESH_TOKEN_KEY).getValue(); super.siteId = stringStorageConfigMap.get(StorageConfigConstant.SHAREPOINT_SITE_ID).getValue(); super.basePath = stringStorageConfigMap.get(StorageConfigConstant.BASE_PATH).getValue(); + StorageConfig proxyDomainStorageConfig = stringStorageConfigMap.get(StorageConfigConstant.PROXY_DOMAIN); + if (proxyDomainStorageConfig != null) { + super.proxyDomain = proxyDomainStorageConfig.getValue(); + } if (StringUtils.isEmpty(accessToken) || StringUtils.isEmpty(refreshToken)) { log.debug("初始化存储策略 [{}] 失败: 参数不完整", getStorageTypeEnum().getDescription()); diff --git a/src/main/java/im/zhaojun/zfile/util/StringUtils.java b/src/main/java/im/zhaojun/zfile/util/StringUtils.java index 686adb9..677cbbc 100644 --- a/src/main/java/im/zhaojun/zfile/util/StringUtils.java +++ b/src/main/java/im/zhaojun/zfile/util/StringUtils.java @@ -1,6 +1,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; /** @@ -101,4 +102,16 @@ public class StringUtils { path = ObjectUtil.defaultIfNull(path, ""); return StringUtils.removeDuplicateSeparator(basePath + ZFileConstant.PATH_SEPARATOR + path); } + + /** + * 替换 URL 中的 Host 部分,如替换 http://a.com/1.txt 为 https://abc.com/1.txt + * @param originUrl + * 原 URL + * @param replaceHost + * 替换的 HOST + * @return 替换后的 URL + */ + public static String replaceHost(String originUrl, String replaceHost) { + return concatPath(replaceHost, URLUtil.getPath(originUrl)); + } }