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 85b8501..3b2dff0 100644 --- a/src/main/java/im/zhaojun/zfile/model/constant/StorageConfigConstant.java +++ b/src/main/java/im/zhaojun/zfile/model/constant/StorageConfigConstant.java @@ -43,4 +43,6 @@ public class StorageConfigConstant { public static final String PROXY_DOMAIN = "proxyDomain"; + public static final String REGION_KEY = "region"; + } \ No newline at end of file diff --git a/src/main/java/im/zhaojun/zfile/service/base/AbstractBaseFileService.java b/src/main/java/im/zhaojun/zfile/service/base/AbstractBaseFileService.java index e20d82c..f88e5ce 100644 --- a/src/main/java/im/zhaojun/zfile/service/base/AbstractBaseFileService.java +++ b/src/main/java/im/zhaojun/zfile/service/base/AbstractBaseFileService.java @@ -10,6 +10,9 @@ import org.springframework.beans.factory.annotation.Value; import javax.annotation.Resource; import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; /** * @author zhaojun @@ -121,6 +124,30 @@ public abstract class AbstractBaseFileService implements BaseFileService { public abstract List storageStrategyConfigList(); + /** + * 合并数据库查询到的驱动器参数和驱动器本身支持的参数列表, 防止获取新增参数字段时出现空指针异常 + * + * @param dbStorageConfigList + * 数据库查询到的存储列表 + */ + public void mergeStrategyConfig(Map dbStorageConfigList) { + // 获取驱动器支持的参数列表 + List storageConfigs = this.storageStrategyConfigList(); + + // 比对数据库已存储的参数列表和驱动器支持的参数列表, 找出新增的支持项 + Set dbConfigKeySet = dbStorageConfigList.keySet(); + Set allKeySet = storageConfigs.stream().map(StorageConfig::getKey).collect(Collectors.toSet()); + + allKeySet.removeAll(dbConfigKeySet); + + // 对于新增的参数, put 到数据库查询的 Map 中, 防止程序获取时出现 NPE. + for (String key : allKeySet) { + StorageConfig storageConfig = new StorageConfig(); + storageConfig.setValue(""); + dbStorageConfigList.put(key, storageConfig); + } + } + /** * 搜索文件 * diff --git a/src/main/java/im/zhaojun/zfile/service/impl/AliyunServiceImpl.java b/src/main/java/im/zhaojun/zfile/service/impl/AliyunServiceImpl.java index de0cee0..07c881d 100644 --- a/src/main/java/im/zhaojun/zfile/service/impl/AliyunServiceImpl.java +++ b/src/main/java/im/zhaojun/zfile/service/impl/AliyunServiceImpl.java @@ -35,6 +35,7 @@ public class AliyunServiceImpl extends AbstractS3BaseFileService implements Base this.driveId = driveId; Map stringStorageConfigMap = storageConfigService.selectStorageConfigMapByDriveId(driveId); + this.mergeStrategyConfig(stringStorageConfigMap); String accessKey = stringStorageConfigMap.get(StorageConfigConstant.ACCESS_KEY).getValue(); String secretKey = stringStorageConfigMap.get(StorageConfigConstant.SECRET_KEY).getValue(); String endPoint = stringStorageConfigMap.get(StorageConfigConstant.ENDPOINT_KEY).getValue(); diff --git a/src/main/java/im/zhaojun/zfile/service/impl/FtpServiceImpl.java b/src/main/java/im/zhaojun/zfile/service/impl/FtpServiceImpl.java index 3aff563..a6a6a21 100644 --- a/src/main/java/im/zhaojun/zfile/service/impl/FtpServiceImpl.java +++ b/src/main/java/im/zhaojun/zfile/service/impl/FtpServiceImpl.java @@ -54,6 +54,7 @@ public class FtpServiceImpl extends AbstractBaseFileService implements BaseFileS this.driveId = driveId; Map stringStorageConfigMap = storageConfigService.selectStorageConfigMapByDriveId(driveId); + this.mergeStrategyConfig(stringStorageConfigMap); host = stringStorageConfigMap.get(StorageConfigConstant.HOST_KEY).getValue(); port = stringStorageConfigMap.get(StorageConfigConstant.PORT_KEY).getValue(); username = stringStorageConfigMap.get(StorageConfigConstant.USERNAME_KEY).getValue(); diff --git a/src/main/java/im/zhaojun/zfile/service/impl/HuaweiServiceImpl.java b/src/main/java/im/zhaojun/zfile/service/impl/HuaweiServiceImpl.java index bda8069..b2a79b6 100644 --- a/src/main/java/im/zhaojun/zfile/service/impl/HuaweiServiceImpl.java +++ b/src/main/java/im/zhaojun/zfile/service/impl/HuaweiServiceImpl.java @@ -35,6 +35,7 @@ public class HuaweiServiceImpl extends AbstractS3BaseFileService implements Base this.driveId = driveId; Map stringStorageConfigMap = storageConfigService.selectStorageConfigMapByDriveId(driveId); + this.mergeStrategyConfig(stringStorageConfigMap); String accessKey = stringStorageConfigMap.get(StorageConfigConstant.ACCESS_KEY).getValue(); String secretKey = stringStorageConfigMap.get(StorageConfigConstant.SECRET_KEY).getValue(); String endPoint = stringStorageConfigMap.get(StorageConfigConstant.ENDPOINT_KEY).getValue(); diff --git a/src/main/java/im/zhaojun/zfile/service/impl/LocalServiceImpl.java b/src/main/java/im/zhaojun/zfile/service/impl/LocalServiceImpl.java index 74d2827..34ad9a5 100644 --- a/src/main/java/im/zhaojun/zfile/service/impl/LocalServiceImpl.java +++ b/src/main/java/im/zhaojun/zfile/service/impl/LocalServiceImpl.java @@ -52,6 +52,7 @@ public class LocalServiceImpl extends AbstractBaseFileService implements BaseFil this.driveId = driveId; Map stringStorageConfigMap = storageConfigService.selectStorageConfigMapByDriveId(driveId); + this.mergeStrategyConfig(stringStorageConfigMap); filePath = stringStorageConfigMap.get(StorageConfigConstant.FILE_PATH_KEY).getValue(); if (Objects.isNull(filePath)) { log.debug("初始化存储策略 [{}] 失败: 参数不完整", getStorageTypeEnum().getDescription()); diff --git a/src/main/java/im/zhaojun/zfile/service/impl/MinIOServiceImpl.java b/src/main/java/im/zhaojun/zfile/service/impl/MinIOServiceImpl.java index a4efbec..4168ccc 100644 --- a/src/main/java/im/zhaojun/zfile/service/impl/MinIOServiceImpl.java +++ b/src/main/java/im/zhaojun/zfile/service/impl/MinIOServiceImpl.java @@ -35,6 +35,7 @@ public class MinIOServiceImpl extends AbstractS3BaseFileService implements BaseF this.driveId = driveId; Map stringStorageConfigMap = storageConfigService.selectStorageConfigMapByDriveId(driveId); + this.mergeStrategyConfig(stringStorageConfigMap); String accessKey = stringStorageConfigMap.get(StorageConfigConstant.ACCESS_KEY).getValue(); String secretKey = stringStorageConfigMap.get(StorageConfigConstant.SECRET_KEY).getValue(); String endPoint = stringStorageConfigMap.get(StorageConfigConstant.ENDPOINT_KEY).getValue(); 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 66dad65..65d409a 100644 --- a/src/main/java/im/zhaojun/zfile/service/impl/OneDriveChinaServiceImpl.java +++ b/src/main/java/im/zhaojun/zfile/service/impl/OneDriveChinaServiceImpl.java @@ -44,6 +44,7 @@ public class OneDriveChinaServiceImpl extends AbstractOneDriveServiceBase implem this.driveId = driveId; Map stringStorageConfigMap = storageConfigService.selectStorageConfigMapByDriveId(driveId); + this.mergeStrategyConfig(stringStorageConfigMap); 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(); 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 4188871..81a9451 100644 --- a/src/main/java/im/zhaojun/zfile/service/impl/OneDriveServiceImpl.java +++ b/src/main/java/im/zhaojun/zfile/service/impl/OneDriveServiceImpl.java @@ -44,6 +44,7 @@ public class OneDriveServiceImpl extends AbstractOneDriveServiceBase implements this.driveId = driveId; Map stringStorageConfigMap = storageConfigService.selectStorageConfigMapByDriveId(driveId); + this.mergeStrategyConfig(stringStorageConfigMap); 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(); diff --git a/src/main/java/im/zhaojun/zfile/service/impl/QiniuServiceImpl.java b/src/main/java/im/zhaojun/zfile/service/impl/QiniuServiceImpl.java index 3a19b0b..b320959 100644 --- a/src/main/java/im/zhaojun/zfile/service/impl/QiniuServiceImpl.java +++ b/src/main/java/im/zhaojun/zfile/service/impl/QiniuServiceImpl.java @@ -35,6 +35,7 @@ public class QiniuServiceImpl extends AbstractS3BaseFileService implements BaseF this.driveId = driveId; Map stringStorageConfigMap = storageConfigService.selectStorageConfigMapByDriveId(driveId); + this.mergeStrategyConfig(stringStorageConfigMap); String accessKey = stringStorageConfigMap.get(StorageConfigConstant.ACCESS_KEY).getValue(); String secretKey = stringStorageConfigMap.get(StorageConfigConstant.SECRET_KEY).getValue(); String endPoint = stringStorageConfigMap.get(StorageConfigConstant.ENDPOINT_KEY).getValue(); diff --git a/src/main/java/im/zhaojun/zfile/service/impl/S3ServiceImpl.java b/src/main/java/im/zhaojun/zfile/service/impl/S3ServiceImpl.java index bbcaeb4..60e6ccd 100644 --- a/src/main/java/im/zhaojun/zfile/service/impl/S3ServiceImpl.java +++ b/src/main/java/im/zhaojun/zfile/service/impl/S3ServiceImpl.java @@ -1,6 +1,7 @@ package im.zhaojun.zfile.service.impl; import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.client.builder.AwsClientBuilder; @@ -10,7 +11,6 @@ import im.zhaojun.zfile.model.entity.StorageConfig; import im.zhaojun.zfile.model.enums.StorageTypeEnum; import im.zhaojun.zfile.service.base.AbstractS3BaseFileService; import im.zhaojun.zfile.service.base.BaseFileService; -import im.zhaojun.zfile.util.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.config.ConfigurableBeanFactory; @@ -36,6 +36,7 @@ public class S3ServiceImpl extends AbstractS3BaseFileService implements BaseFile this.driveId = driveId; Map stringStorageConfigMap = storageConfigService.selectStorageConfigMapByDriveId(driveId); + this.mergeStrategyConfig(stringStorageConfigMap); String accessKey = stringStorageConfigMap.get(StorageConfigConstant.ACCESS_KEY).getValue(); String secretKey = stringStorageConfigMap.get(StorageConfigConstant.SECRET_KEY).getValue(); String endPoint = stringStorageConfigMap.get(StorageConfigConstant.ENDPOINT_KEY).getValue(); 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 2804c40..0af4c07 100644 --- a/src/main/java/im/zhaojun/zfile/service/impl/SharePointChinaServiceImpl.java +++ b/src/main/java/im/zhaojun/zfile/service/impl/SharePointChinaServiceImpl.java @@ -44,6 +44,7 @@ public class SharePointChinaServiceImpl extends AbstractSharePointServiceBase im this.driveId = driveId; Map stringStorageConfigMap = storageConfigService.selectStorageConfigMapByDriveId(driveId); + this.mergeStrategyConfig(stringStorageConfigMap); String accessToken = stringStorageConfigMap.get(StorageConfigConstant.ACCESS_TOKEN_KEY).getValue(); String refreshToken = stringStorageConfigMap.get(StorageConfigConstant.REFRESH_TOKEN_KEY).getValue(); super.siteId = stringStorageConfigMap.get(StorageConfigConstant.SHAREPOINT_SITE_ID).getValue(); 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 099c530..e5dfd81 100644 --- a/src/main/java/im/zhaojun/zfile/service/impl/SharePointServiceImpl.java +++ b/src/main/java/im/zhaojun/zfile/service/impl/SharePointServiceImpl.java @@ -44,6 +44,7 @@ public class SharePointServiceImpl extends AbstractSharePointServiceBase impleme this.driveId = driveId; Map stringStorageConfigMap = storageConfigService.selectStorageConfigMapByDriveId(driveId); + this.mergeStrategyConfig(stringStorageConfigMap); String accessToken = stringStorageConfigMap.get(StorageConfigConstant.ACCESS_TOKEN_KEY).getValue(); String refreshToken = stringStorageConfigMap.get(StorageConfigConstant.REFRESH_TOKEN_KEY).getValue(); super.siteId = stringStorageConfigMap.get(StorageConfigConstant.SHAREPOINT_SITE_ID).getValue(); diff --git a/src/main/java/im/zhaojun/zfile/service/impl/TencentServiceImpl.java b/src/main/java/im/zhaojun/zfile/service/impl/TencentServiceImpl.java index 972fc69..5f1409b 100644 --- a/src/main/java/im/zhaojun/zfile/service/impl/TencentServiceImpl.java +++ b/src/main/java/im/zhaojun/zfile/service/impl/TencentServiceImpl.java @@ -35,6 +35,7 @@ public class TencentServiceImpl extends AbstractS3BaseFileService implements Bas this.driveId = driveId; Map stringStorageConfigMap = storageConfigService.selectStorageConfigMapByDriveId(driveId); + this.mergeStrategyConfig(stringStorageConfigMap); String secretId = stringStorageConfigMap.get(StorageConfigConstant.SECRET_ID_KEY).getValue(); String secretKey = stringStorageConfigMap.get(StorageConfigConstant.SECRET_KEY).getValue(); String endPoint = stringStorageConfigMap.get(StorageConfigConstant.ENDPOINT_KEY).getValue(); diff --git a/src/main/java/im/zhaojun/zfile/service/impl/UpYunServiceImpl.java b/src/main/java/im/zhaojun/zfile/service/impl/UpYunServiceImpl.java index 36e5f96..4668f00 100644 --- a/src/main/java/im/zhaojun/zfile/service/impl/UpYunServiceImpl.java +++ b/src/main/java/im/zhaojun/zfile/service/impl/UpYunServiceImpl.java @@ -53,6 +53,7 @@ public class UpYunServiceImpl extends AbstractBaseFileService implements BaseFil this.driveId = driveId; Map stringStorageConfigMap = storageConfigService.selectStorageConfigMapByDriveId(driveId); + this.mergeStrategyConfig(stringStorageConfigMap); String bucketName = stringStorageConfigMap.get(StorageConfigConstant.BUCKET_NAME_KEY).getValue(); String username = stringStorageConfigMap.get(StorageConfigConstant.USERNAME_KEY).getValue(); String password = stringStorageConfigMap.get(StorageConfigConstant.PASSWORD_KEY).getValue();