From 849ed43c1ea24cb0156b8aeb59c435c2172161aa Mon Sep 17 00:00:00 2001 From: jiangdingxuan Date: Tue, 9 Jan 2024 15:30:14 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E9=99=A4OSS=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 12 - .../common/core/service/OssService.java | 18 -- .../common/oss/constant/OssConstant.java | 40 --- .../dromara/common/oss/core/OssClient.java | 262 ------------------ .../common/oss/entity/UploadResult.java | 24 -- .../common/oss/enumd/AccessPolicyType.java | 55 ---- .../dromara/common/oss/enumd/PolicyType.java | 35 --- .../common/oss/exception/OssException.java | 19 -- .../common/oss/factory/OssFactory.java | 65 ----- .../common/oss/properties/OssProperties.java | 63 ----- .../core/impl/OssUrlTranslationImpl.java | 29 -- .../system/SysOssConfigController.java | 105 ------- .../controller/system/SysOssController.java | 108 -------- .../system/SysProfileController.java | 36 +-- .../org/dromara/system/domain/SysOss.java | 50 ---- .../dromara/system/domain/SysOssConfig.java | 89 ------ .../dromara/system/domain/bo/SysOssBo.java | 49 ---- .../system/domain/bo/SysOssConfigBo.java | 109 -------- .../system/domain/vo/SysOssConfigVo.java | 97 ------- .../system/domain/vo/SysOssUploadVo.java | 28 -- .../dromara/system/domain/vo/SysOssVo.java | 72 ----- .../system/mapper/SysOssConfigMapper.java | 16 -- .../dromara/system/mapper/SysOssMapper.java | 13 - .../runner/SystemApplicationRunner.java | 28 -- .../system/service/ISysOssConfigService.java | 65 ----- .../system/service/ISysOssService.java | 36 --- .../service/impl/SysOssConfigServiceImpl.java | 176 ------------ .../service/impl/SysOssServiceImpl.java | 199 ------------- 28 files changed, 1 insertion(+), 1897 deletions(-) delete mode 100644 src/main/java/org/dromara/common/core/service/OssService.java delete mode 100644 src/main/java/org/dromara/common/oss/constant/OssConstant.java delete mode 100644 src/main/java/org/dromara/common/oss/core/OssClient.java delete mode 100644 src/main/java/org/dromara/common/oss/entity/UploadResult.java delete mode 100644 src/main/java/org/dromara/common/oss/enumd/AccessPolicyType.java delete mode 100644 src/main/java/org/dromara/common/oss/enumd/PolicyType.java delete mode 100644 src/main/java/org/dromara/common/oss/exception/OssException.java delete mode 100644 src/main/java/org/dromara/common/oss/factory/OssFactory.java delete mode 100644 src/main/java/org/dromara/common/oss/properties/OssProperties.java delete mode 100644 src/main/java/org/dromara/common/translation/core/impl/OssUrlTranslationImpl.java delete mode 100644 src/main/java/org/dromara/system/controller/system/SysOssConfigController.java delete mode 100644 src/main/java/org/dromara/system/controller/system/SysOssController.java delete mode 100644 src/main/java/org/dromara/system/domain/SysOss.java delete mode 100644 src/main/java/org/dromara/system/domain/SysOssConfig.java delete mode 100644 src/main/java/org/dromara/system/domain/bo/SysOssBo.java delete mode 100644 src/main/java/org/dromara/system/domain/bo/SysOssConfigBo.java delete mode 100644 src/main/java/org/dromara/system/domain/vo/SysOssConfigVo.java delete mode 100644 src/main/java/org/dromara/system/domain/vo/SysOssUploadVo.java delete mode 100644 src/main/java/org/dromara/system/domain/vo/SysOssVo.java delete mode 100644 src/main/java/org/dromara/system/mapper/SysOssConfigMapper.java delete mode 100644 src/main/java/org/dromara/system/mapper/SysOssMapper.java delete mode 100644 src/main/java/org/dromara/system/runner/SystemApplicationRunner.java delete mode 100644 src/main/java/org/dromara/system/service/ISysOssConfigService.java delete mode 100644 src/main/java/org/dromara/system/service/ISysOssService.java delete mode 100644 src/main/java/org/dromara/system/service/impl/SysOssConfigServiceImpl.java delete mode 100644 src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java diff --git a/pom.xml b/pom.xml index f8489a7..1cfee0b 100644 --- a/pom.xml +++ b/pom.xml @@ -42,8 +42,6 @@ 2.7.0 - - 1.12.600 2.2.0 @@ -225,11 +223,6 @@ ${okhttp.version} - - com.amazonaws - aws-java-sdk-s3 - ${aws-java-sdk-s3.version} - org.dromara.sms4j @@ -550,11 +543,6 @@ - - com.amazonaws - aws-java-sdk-s3 - - org.apache.velocity diff --git a/src/main/java/org/dromara/common/core/service/OssService.java b/src/main/java/org/dromara/common/core/service/OssService.java deleted file mode 100644 index 43742b3..0000000 --- a/src/main/java/org/dromara/common/core/service/OssService.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.dromara.common.core.service; - -/** - * 通用 OSS服务 - * - * @author Lion Li - */ -public interface OssService { - - /** - * 通过ossId查询对应的url - * - * @param ossIds ossId串逗号分隔 - * @return url串逗号分隔 - */ - String selectUrlByIds(String ossIds); - -} diff --git a/src/main/java/org/dromara/common/oss/constant/OssConstant.java b/src/main/java/org/dromara/common/oss/constant/OssConstant.java deleted file mode 100644 index 9d8db93..0000000 --- a/src/main/java/org/dromara/common/oss/constant/OssConstant.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.dromara.common.oss.constant; - -import org.dromara.common.core.constant.GlobalConstants; - -import java.util.Arrays; -import java.util.List; - -/** - * 对象存储常量 - * - * @author Lion Li - */ -public interface OssConstant { - - /** - * 默认配置KEY - */ - String DEFAULT_CONFIG_KEY = GlobalConstants.GLOBAL_REDIS_KEY + "sys_oss:default_config"; - - /** - * 预览列表资源开关Key - */ - String PEREVIEW_LIST_RESOURCE_KEY = "sys.oss.previewListResource"; - - /** - * 系统数据ids - */ - List SYSTEM_DATA_IDS = Arrays.asList(1L, 2L, 3L, 4L); - - /** - * 云服务商 - */ - String[] CLOUD_SERVICE = new String[] {"aliyun", "qcloud", "qiniu", "obs"}; - - /** - * https 状态 - */ - String IS_HTTPS = "Y"; - -} diff --git a/src/main/java/org/dromara/common/oss/core/OssClient.java b/src/main/java/org/dromara/common/oss/core/OssClient.java deleted file mode 100644 index 53e05c9..0000000 --- a/src/main/java/org/dromara/common/oss/core/OssClient.java +++ /dev/null @@ -1,262 +0,0 @@ -package org.dromara.common.oss.core; - -import cn.hutool.core.io.IoUtil; -import cn.hutool.core.util.IdUtil; -import com.amazonaws.ClientConfiguration; -import com.amazonaws.HttpMethod; -import com.amazonaws.Protocol; -import com.amazonaws.auth.AWSCredentials; -import com.amazonaws.auth.AWSCredentialsProvider; -import com.amazonaws.auth.AWSStaticCredentialsProvider; -import com.amazonaws.auth.BasicAWSCredentials; -import com.amazonaws.client.builder.AwsClientBuilder; -import com.amazonaws.services.s3.AmazonS3; -import com.amazonaws.services.s3.AmazonS3Client; -import com.amazonaws.services.s3.AmazonS3ClientBuilder; -import com.amazonaws.services.s3.model.*; -import org.dromara.common.core.utils.DateUtils; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.oss.constant.OssConstant; -import org.dromara.common.oss.entity.UploadResult; -import org.dromara.common.oss.enumd.AccessPolicyType; -import org.dromara.common.oss.enumd.PolicyType; -import org.dromara.common.oss.exception.OssException; -import org.dromara.common.oss.properties.OssProperties; - -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.InputStream; -import java.net.URL; -import java.util.Date; - -/** - * S3 存储协议 所有兼容S3协议的云厂商均支持 - * 阿里云 腾讯云 七牛云 minio - * - * @author Lion Li - */ -public class OssClient { - - private final String configKey; - - private final OssProperties properties; - - private final AmazonS3 client; - - public OssClient(String configKey, OssProperties ossProperties) { - this.configKey = configKey; - this.properties = ossProperties; - try { - AwsClientBuilder.EndpointConfiguration endpointConfig = - new AwsClientBuilder.EndpointConfiguration(properties.getEndpoint(), properties.getRegion()); - - AWSCredentials credentials = new BasicAWSCredentials(properties.getAccessKey(), properties.getSecretKey()); - AWSCredentialsProvider credentialsProvider = new AWSStaticCredentialsProvider(credentials); - ClientConfiguration clientConfig = new ClientConfiguration(); - if (OssConstant.IS_HTTPS.equals(properties.getIsHttps())) { - clientConfig.setProtocol(Protocol.HTTPS); - } else { - clientConfig.setProtocol(Protocol.HTTP); - } - AmazonS3ClientBuilder build = AmazonS3Client.builder() - .withEndpointConfiguration(endpointConfig) - .withClientConfiguration(clientConfig) - .withCredentials(credentialsProvider) - .disableChunkedEncoding(); - if (!StringUtils.containsAny(properties.getEndpoint(), OssConstant.CLOUD_SERVICE)) { - // minio 使用https限制使用域名访问 需要此配置 站点填域名 - build.enablePathStyleAccess(); - } - this.client = build.build(); - - createBucket(); - } catch (Exception e) { - if (e instanceof OssException) { - throw e; - } - throw new OssException("配置错误! 请检查系统配置:[" + e.getMessage() + "]"); - } - } - - public void createBucket() { - try { - String bucketName = properties.getBucketName(); - if (client.doesBucketExistV2(bucketName)) { - return; - } - CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName); - AccessPolicyType accessPolicy = getAccessPolicy(); - createBucketRequest.setCannedAcl(accessPolicy.getAcl()); - client.createBucket(createBucketRequest); - client.setBucketPolicy(bucketName, getPolicy(bucketName, accessPolicy.getPolicyType())); - } catch (Exception e) { - throw new OssException("创建Bucket失败, 请核对配置信息:[" + e.getMessage() + "]"); - } - } - - public UploadResult upload(byte[] data, String path, String contentType) { - return upload(new ByteArrayInputStream(data), path, contentType); - } - - public UploadResult upload(InputStream inputStream, String path, String contentType) { - if (!(inputStream instanceof ByteArrayInputStream)) { - inputStream = new ByteArrayInputStream(IoUtil.readBytes(inputStream)); - } - try { - ObjectMetadata metadata = new ObjectMetadata(); - metadata.setContentType(contentType); - metadata.setContentLength(inputStream.available()); - PutObjectRequest putObjectRequest = new PutObjectRequest(properties.getBucketName(), path, inputStream, metadata); - // 设置上传对象的 Acl 为公共读 - putObjectRequest.setCannedAcl(getAccessPolicy().getAcl()); - client.putObject(putObjectRequest); - } catch (Exception e) { - throw new OssException("上传文件失败,请检查配置信息:[" + e.getMessage() + "]"); - } - return UploadResult.builder().url(getUrl() + "/" + path).filename(path).build(); - } - - public UploadResult upload(File file, String path) { - try { - PutObjectRequest putObjectRequest = new PutObjectRequest(properties.getBucketName(), path, file); - // 设置上传对象的 Acl 为公共读 - putObjectRequest.setCannedAcl(getAccessPolicy().getAcl()); - client.putObject(putObjectRequest); - } catch (Exception e) { - throw new OssException("上传文件失败,请检查配置信息:[" + e.getMessage() + "]"); - } - return UploadResult.builder().url(getUrl() + "/" + path).filename(path).build(); - } - - public void delete(String path) { - path = path.replace(getUrl() + "/", ""); - try { - client.deleteObject(properties.getBucketName(), path); - } catch (Exception e) { - throw new OssException("删除文件失败,请检查配置信息:[" + e.getMessage() + "]"); - } - } - - public UploadResult uploadSuffix(byte[] data, String suffix, String contentType) { - return upload(data, getPath(properties.getPrefix(), suffix), contentType); - } - - public UploadResult uploadSuffix(InputStream inputStream, String suffix, String contentType) { - return upload(inputStream, getPath(properties.getPrefix(), suffix), contentType); - } - - public UploadResult uploadSuffix(File file, String suffix) { - return upload(file, getPath(properties.getPrefix(), suffix)); - } - - /** - * 获取文件元数据 - * - * @param path 完整文件路径 - */ - public ObjectMetadata getObjectMetadata(String path) { - path = path.replace(getUrl() + "/", ""); - S3Object object = client.getObject(properties.getBucketName(), path); - return object.getObjectMetadata(); - } - - public InputStream getObjectContent(String path) { - path = path.replace(getUrl() + "/", ""); - S3Object object = client.getObject(properties.getBucketName(), path); - return object.getObjectContent(); - } - - public String getUrl() { - String domain = properties.getDomain(); - String endpoint = properties.getEndpoint(); - String header = OssConstant.IS_HTTPS.equals(properties.getIsHttps()) ? "https://" : "http://"; - // 云服务商直接返回 - if (StringUtils.containsAny(endpoint, OssConstant.CLOUD_SERVICE)) { - if (StringUtils.isNotBlank(domain)) { - return header + domain; - } - return header + properties.getBucketName() + "." + endpoint; - } - // minio 单独处理 - if (StringUtils.isNotBlank(domain)) { - return header + domain + "/" + properties.getBucketName(); - } - return header + endpoint + "/" + properties.getBucketName(); - } - - public String getPath(String prefix, String suffix) { - // 生成uuid - String uuid = IdUtil.fastSimpleUUID(); - // 文件路径 - String path = DateUtils.datePath() + "/" + uuid; - if (StringUtils.isNotBlank(prefix)) { - path = prefix + "/" + path; - } - return path + suffix; - } - - - public String getConfigKey() { - return configKey; - } - - /** - * 获取私有URL链接 - * - * @param objectKey 对象KEY - * @param second 授权时间 - */ - public String getPrivateUrl(String objectKey, Integer second) { - GeneratePresignedUrlRequest generatePresignedUrlRequest = - new GeneratePresignedUrlRequest(properties.getBucketName(), objectKey) - .withMethod(HttpMethod.GET) - .withExpiration(new Date(System.currentTimeMillis() + 1000L * second)); - URL url = client.generatePresignedUrl(generatePresignedUrlRequest); - return url.toString(); - } - - /** - * 检查配置是否相同 - */ - public boolean checkPropertiesSame(OssProperties properties) { - return this.properties.equals(properties); - } - - /** - * 获取当前桶权限类型 - * - * @return 当前桶权限类型code - */ - public AccessPolicyType getAccessPolicy() { - return AccessPolicyType.getByType(properties.getAccessPolicy()); - } - - private static String getPolicy(String bucketName, PolicyType policyType) { - StringBuilder builder = new StringBuilder(); - builder.append("{\n\"Statement\": [\n{\n\"Action\": [\n"); - builder.append(switch (policyType) { - case WRITE -> "\"s3:GetBucketLocation\",\n\"s3:ListBucketMultipartUploads\"\n"; - case READ_WRITE -> "\"s3:GetBucketLocation\",\n\"s3:ListBucket\",\n\"s3:ListBucketMultipartUploads\"\n"; - default -> "\"s3:GetBucketLocation\"\n"; - }); - builder.append("],\n\"Effect\": \"Allow\",\n\"Principal\": \"*\",\n\"Resource\": \"arn:aws:s3:::"); - builder.append(bucketName); - builder.append("\"\n},\n"); - if (policyType == PolicyType.READ) { - builder.append("{\n\"Action\": [\n\"s3:ListBucket\"\n],\n\"Effect\": \"Deny\",\n\"Principal\": \"*\",\n\"Resource\": \"arn:aws:s3:::"); - builder.append(bucketName); - builder.append("\"\n},\n"); - } - builder.append("{\n\"Action\": "); - builder.append(switch (policyType) { - case WRITE -> "[\n\"s3:AbortMultipartUpload\",\n\"s3:DeleteObject\",\n\"s3:ListMultipartUploadParts\",\n\"s3:PutObject\"\n],\n"; - case READ_WRITE -> "[\n\"s3:AbortMultipartUpload\",\n\"s3:DeleteObject\",\n\"s3:GetObject\",\n\"s3:ListMultipartUploadParts\",\n\"s3:PutObject\"\n],\n"; - default -> "\"s3:GetObject\",\n"; - }); - builder.append("\"Effect\": \"Allow\",\n\"Principal\": \"*\",\n\"Resource\": \"arn:aws:s3:::"); - builder.append(bucketName); - builder.append("/*\"\n}\n],\n\"Version\": \"2012-10-17\"\n}\n"); - return builder.toString(); - } - -} diff --git a/src/main/java/org/dromara/common/oss/entity/UploadResult.java b/src/main/java/org/dromara/common/oss/entity/UploadResult.java deleted file mode 100644 index a6f57e5..0000000 --- a/src/main/java/org/dromara/common/oss/entity/UploadResult.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.dromara.common.oss.entity; - -import lombok.Builder; -import lombok.Data; - -/** - * 上传返回体 - * - * @author Lion Li - */ -@Data -@Builder -public class UploadResult { - - /** - * 文件路径 - */ - private String url; - - /** - * 文件名 - */ - private String filename; -} diff --git a/src/main/java/org/dromara/common/oss/enumd/AccessPolicyType.java b/src/main/java/org/dromara/common/oss/enumd/AccessPolicyType.java deleted file mode 100644 index 9074d72..0000000 --- a/src/main/java/org/dromara/common/oss/enumd/AccessPolicyType.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.dromara.common.oss.enumd; - -import com.amazonaws.services.s3.model.CannedAccessControlList; -import lombok.AllArgsConstructor; -import lombok.Getter; - -/** - * 桶访问策略配置 - * - * @author 陈賝 - */ -@Getter -@AllArgsConstructor -public enum AccessPolicyType { - - /** - * private - */ - PRIVATE("0", CannedAccessControlList.Private, PolicyType.WRITE), - - /** - * public - */ - PUBLIC("1", CannedAccessControlList.PublicRead, PolicyType.READ), - - /** - * custom - */ - CUSTOM("2",CannedAccessControlList.PublicRead, PolicyType.READ); - - /** - * 桶 权限类型 - */ - private final String type; - - /** - * 文件对象 权限类型 - */ - private final CannedAccessControlList acl; - - /** - * 桶策略类型 - */ - private final PolicyType policyType; - - public static AccessPolicyType getByType(String type) { - for (AccessPolicyType value : values()) { - if (value.getType().equals(type)) { - return value; - } - } - throw new RuntimeException("'type' not found By " + type); - } - -} diff --git a/src/main/java/org/dromara/common/oss/enumd/PolicyType.java b/src/main/java/org/dromara/common/oss/enumd/PolicyType.java deleted file mode 100644 index fe96341..0000000 --- a/src/main/java/org/dromara/common/oss/enumd/PolicyType.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.dromara.common.oss.enumd; - -import lombok.AllArgsConstructor; -import lombok.Getter; - -/** - * minio策略配置 - * - * @author Lion Li - */ -@Getter -@AllArgsConstructor -public enum PolicyType { - - /** - * 只读 - */ - READ("read-only"), - - /** - * 只写 - */ - WRITE("write-only"), - - /** - * 读写 - */ - READ_WRITE("read-write"); - - /** - * 类型 - */ - private final String type; - -} diff --git a/src/main/java/org/dromara/common/oss/exception/OssException.java b/src/main/java/org/dromara/common/oss/exception/OssException.java deleted file mode 100644 index 52e9623..0000000 --- a/src/main/java/org/dromara/common/oss/exception/OssException.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.dromara.common.oss.exception; - -import java.io.Serial; - -/** - * OSS异常类 - * - * @author Lion Li - */ -public class OssException extends RuntimeException { - - @Serial - private static final long serialVersionUID = 1L; - - public OssException(String msg) { - super(msg); - } - -} diff --git a/src/main/java/org/dromara/common/oss/factory/OssFactory.java b/src/main/java/org/dromara/common/oss/factory/OssFactory.java deleted file mode 100644 index 763b090..0000000 --- a/src/main/java/org/dromara/common/oss/factory/OssFactory.java +++ /dev/null @@ -1,65 +0,0 @@ -package org.dromara.common.oss.factory; - -import org.dromara.common.core.constant.CacheNames; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.json.utils.JsonUtils; -import org.dromara.common.oss.constant.OssConstant; -import org.dromara.common.oss.core.OssClient; -import org.dromara.common.oss.exception.OssException; -import org.dromara.common.oss.properties.OssProperties; -import org.dromara.common.redis.utils.CacheUtils; -import org.dromara.common.redis.utils.RedisUtils; -import lombok.extern.slf4j.Slf4j; - -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -/** - * 文件上传Factory - * - * @author Lion Li - */ -@Slf4j -public class OssFactory { - - private static final Map CLIENT_CACHE = new ConcurrentHashMap<>(); - - /** - * 获取默认实例 - */ - public static OssClient instance() { - // 获取redis 默认类型 - String configKey = RedisUtils.getCacheObject(OssConstant.DEFAULT_CONFIG_KEY); - if (StringUtils.isEmpty(configKey)) { - throw new OssException("文件存储服务类型无法找到!"); - } - return instance(configKey); - } - - /** - * 根据类型获取实例 - */ - public static synchronized OssClient instance(String configKey) { - String json = CacheUtils.get(CacheNames.SYS_OSS_CONFIG, configKey); - if (json == null) { - throw new OssException("系统异常, '" + configKey + "'配置信息不存在!"); - } - OssProperties properties = JsonUtils.parseObject(json, OssProperties.class); - // 使用租户标识避免多个租户相同key实例覆盖 - String key = properties.getTenantId() + ":" + configKey; - OssClient client = CLIENT_CACHE.get(key); - if (client == null) { - CLIENT_CACHE.put(key, new OssClient(configKey, properties)); - log.info("创建OSS实例 key => {}", configKey); - return CLIENT_CACHE.get(key); - } - // 配置不相同则重新构建 - if (!client.checkPropertiesSame(properties)) { - CLIENT_CACHE.put(key, new OssClient(configKey, properties)); - log.info("重载OSS实例 key => {}", configKey); - return CLIENT_CACHE.get(key); - } - return client; - } - -} diff --git a/src/main/java/org/dromara/common/oss/properties/OssProperties.java b/src/main/java/org/dromara/common/oss/properties/OssProperties.java deleted file mode 100644 index cb37206..0000000 --- a/src/main/java/org/dromara/common/oss/properties/OssProperties.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.dromara.common.oss.properties; - -import lombok.Data; - -/** - * OSS对象存储 配置属性 - * - * @author Lion Li - */ -@Data -public class OssProperties { - - /** - * 租户id - */ - private String tenantId; - - /** - * 访问站点 - */ - private String endpoint; - - /** - * 自定义域名 - */ - private String domain; - - /** - * 前缀 - */ - private String prefix; - - /** - * ACCESS_KEY - */ - private String accessKey; - - /** - * SECRET_KEY - */ - private String secretKey; - - /** - * 存储空间名 - */ - private String bucketName; - - /** - * 存储区域 - */ - private String region; - - /** - * 是否https(Y=是,N=否) - */ - private String isHttps; - - /** - * 桶权限类型(0private 1public 2custom) - */ - private String accessPolicy; - -} diff --git a/src/main/java/org/dromara/common/translation/core/impl/OssUrlTranslationImpl.java b/src/main/java/org/dromara/common/translation/core/impl/OssUrlTranslationImpl.java deleted file mode 100644 index fc6f6df..0000000 --- a/src/main/java/org/dromara/common/translation/core/impl/OssUrlTranslationImpl.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.dromara.common.translation.core.impl; - -import org.dromara.common.core.service.OssService; -import org.dromara.common.translation.annotation.TranslationType; -import org.dromara.common.translation.constant.TransConstant; -import org.dromara.common.translation.core.TranslationInterface; -import lombok.AllArgsConstructor; - -/** - * OSS翻译实现 - * - * @author Lion Li - */ -@AllArgsConstructor -@TranslationType(type = TransConstant.OSS_ID_TO_URL) -public class OssUrlTranslationImpl implements TranslationInterface { - - private final OssService ossService; - - @Override - public String translation(Object key, String other) { - if (key instanceof String ids) { - return ossService.selectUrlByIds(ids); - } else if (key instanceof Long id) { - return ossService.selectUrlByIds(id.toString()); - } - return null; - } -} diff --git a/src/main/java/org/dromara/system/controller/system/SysOssConfigController.java b/src/main/java/org/dromara/system/controller/system/SysOssConfigController.java deleted file mode 100644 index 24ddaff..0000000 --- a/src/main/java/org/dromara/system/controller/system/SysOssConfigController.java +++ /dev/null @@ -1,105 +0,0 @@ -package org.dromara.system.controller.system; - -import cn.dev33.satoken.annotation.SaCheckPermission; -import org.dromara.common.core.domain.R; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.core.validate.QueryGroup; -import org.dromara.common.web.core.BaseController; -import org.dromara.common.idempotent.annotation.RepeatSubmit; -import org.dromara.common.log.annotation.Log; -import org.dromara.common.log.enums.BusinessType; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.system.domain.bo.SysOssConfigBo; -import org.dromara.system.domain.vo.SysOssConfigVo; -import org.dromara.system.service.ISysOssConfigService; -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; -import lombok.RequiredArgsConstructor; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * 对象存储配置 - * - * @author Lion Li - * @author 孤舟烟雨 - * @date 2021-08-13 - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/resource/oss/config") -public class SysOssConfigController extends BaseController { - - private final ISysOssConfigService ossConfigService; - - /** - * 查询对象存储配置列表 - */ - @SaCheckPermission("system:ossConfig:list") - @GetMapping("/list") - public TableDataInfo list(@Validated(QueryGroup.class) SysOssConfigBo bo, PageQuery pageQuery) { - return ossConfigService.queryPageList(bo, pageQuery); - } - - /** - * 获取对象存储配置详细信息 - * - * @param ossConfigId OSS配置ID - */ - @SaCheckPermission("system:ossConfig:list") - @GetMapping("/{ossConfigId}") - public R getInfo(@NotNull(message = "主键不能为空") - @PathVariable Long ossConfigId) { - return R.ok(ossConfigService.queryById(ossConfigId)); - } - - /** - * 新增对象存储配置 - */ - @SaCheckPermission("system:ossConfig:add") - @Log(title = "对象存储配置", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping() - public R add(@Validated(AddGroup.class) @RequestBody SysOssConfigBo bo) { - return toAjax(ossConfigService.insertByBo(bo)); - } - - /** - * 修改对象存储配置 - */ - @SaCheckPermission("system:ossConfig:edit") - @Log(title = "对象存储配置", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping() - public R edit(@Validated(EditGroup.class) @RequestBody SysOssConfigBo bo) { - return toAjax(ossConfigService.updateByBo(bo)); - } - - /** - * 删除对象存储配置 - * - * @param ossConfigIds OSS配置ID串 - */ - @SaCheckPermission("system:ossConfig:remove") - @Log(title = "对象存储配置", businessType = BusinessType.DELETE) - @DeleteMapping("/{ossConfigIds}") - public R remove(@NotEmpty(message = "主键不能为空") - @PathVariable Long[] ossConfigIds) { - return toAjax(ossConfigService.deleteWithValidByIds(List.of(ossConfigIds), true)); - } - - /** - * 状态修改 - */ - @SaCheckPermission("system:ossConfig:edit") - @Log(title = "对象存储状态修改", businessType = BusinessType.UPDATE) - @PutMapping("/changeStatus") - public R changeStatus(@RequestBody SysOssConfigBo bo) { - return toAjax(ossConfigService.updateOssConfigStatus(bo)); - } -} diff --git a/src/main/java/org/dromara/system/controller/system/SysOssController.java b/src/main/java/org/dromara/system/controller/system/SysOssController.java deleted file mode 100644 index 73ada3b..0000000 --- a/src/main/java/org/dromara/system/controller/system/SysOssController.java +++ /dev/null @@ -1,108 +0,0 @@ -package org.dromara.system.controller.system; - - -import cn.dev33.satoken.annotation.SaCheckPermission; -import cn.hutool.core.util.ObjectUtil; -import org.dromara.common.core.domain.R; -import org.dromara.common.core.validate.QueryGroup; -import org.dromara.common.web.core.BaseController; -import org.dromara.common.log.annotation.Log; -import org.dromara.common.log.enums.BusinessType; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.system.domain.bo.SysOssBo; -import org.dromara.system.domain.vo.SysOssUploadVo; -import org.dromara.system.domain.vo.SysOssVo; -import org.dromara.system.service.ISysOssService; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.NotEmpty; -import lombok.RequiredArgsConstructor; -import org.springframework.http.MediaType; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; - -import java.io.IOException; -import java.util.Arrays; -import java.util.List; - -/** - * 文件上传 控制层 - * - * @author Lion Li - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/resource/oss") -public class SysOssController extends BaseController { - - private final ISysOssService ossService; - - /** - * 查询OSS对象存储列表 - */ - @SaCheckPermission("system:oss:list") - @GetMapping("/list") - public TableDataInfo list(@Validated(QueryGroup.class) SysOssBo bo, PageQuery pageQuery) { - return ossService.queryPageList(bo, pageQuery); - } - - /** - * 查询OSS对象基于id串 - * - * @param ossIds OSS对象ID串 - */ - @SaCheckPermission("system:oss:list") - @GetMapping("/listByIds/{ossIds}") - public R> listByIds(@NotEmpty(message = "主键不能为空") - @PathVariable Long[] ossIds) { - List list = ossService.listByIds(Arrays.asList(ossIds)); - return R.ok(list); - } - - /** - * 上传OSS对象存储 - * - * @param file 文件 - */ - @SaCheckPermission("system:oss:upload") - @Log(title = "OSS对象存储", businessType = BusinessType.INSERT) - @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) - public R upload(@RequestPart("file") MultipartFile file) { - if (ObjectUtil.isNull(file)) { - return R.fail("上传文件不能为空"); - } - SysOssVo oss = ossService.upload(file); - SysOssUploadVo uploadVo = new SysOssUploadVo(); - uploadVo.setUrl(oss.getUrl()); - uploadVo.setFileName(oss.getOriginalName()); - uploadVo.setOssId(oss.getOssId().toString()); - return R.ok(uploadVo); - } - - /** - * 下载OSS对象 - * - * @param ossId OSS对象ID - */ - @SaCheckPermission("system:oss:download") - @GetMapping("/download/{ossId}") - public void download(@PathVariable Long ossId, HttpServletResponse response) throws IOException { - ossService.download(ossId, response); - } - - /** - * 删除OSS对象存储 - * - * @param ossIds OSS对象ID串 - */ - @SaCheckPermission("system:oss:remove") - @Log(title = "OSS对象存储", businessType = BusinessType.DELETE) - @DeleteMapping("/{ossIds}") - public R remove(@NotEmpty(message = "主键不能为空") - @PathVariable Long[] ossIds) { - return toAjax(ossService.deleteWithValidByIds(List.of(ossIds), true)); - } - -} diff --git a/src/main/java/org/dromara/system/controller/system/SysProfileController.java b/src/main/java/org/dromara/system/controller/system/SysProfileController.java index f9c4b3d..5756148 100644 --- a/src/main/java/org/dromara/system/controller/system/SysProfileController.java +++ b/src/main/java/org/dromara/system/controller/system/SysProfileController.java @@ -2,10 +2,9 @@ package org.dromara.system.controller.system; import cn.dev33.satoken.secure.BCrypt; import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.io.FileUtil; +import lombok.RequiredArgsConstructor; import org.dromara.common.core.domain.R; import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.core.utils.file.MimeTypeUtils; import org.dromara.common.encrypt.annotation.ApiEncrypt; import org.dromara.common.log.annotation.Log; import org.dromara.common.log.enums.BusinessType; @@ -14,19 +13,11 @@ import org.dromara.common.web.core.BaseController; import org.dromara.system.domain.bo.SysUserBo; import org.dromara.system.domain.bo.SysUserPasswordBo; import org.dromara.system.domain.bo.SysUserProfileBo; -import org.dromara.system.domain.vo.AvatarVo; import org.dromara.system.domain.vo.ProfileVo; -import org.dromara.system.domain.vo.SysOssVo; import org.dromara.system.domain.vo.SysUserVo; -import org.dromara.system.service.ISysOssService; import org.dromara.system.service.ISysUserService; -import lombok.RequiredArgsConstructor; -import org.springframework.http.MediaType; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; - -import java.util.Arrays; /** * 个人信息 业务处理 @@ -40,7 +31,6 @@ import java.util.Arrays; public class SysProfileController extends BaseController { private final ISysUserService userService; - private final ISysOssService ossService; /** * 个人信息 @@ -99,28 +89,4 @@ public class SysProfileController extends BaseController { } return R.fail("修改密码异常,请联系管理员"); } - - /** - * 头像上传 - * - * @param avatarfile 用户头像 - */ - @Log(title = "用户头像", businessType = BusinessType.UPDATE) - @PostMapping(value = "/avatar", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) - public R avatar(@RequestPart("avatarfile") MultipartFile avatarfile) { - if (!avatarfile.isEmpty()) { - String extension = FileUtil.extName(avatarfile.getOriginalFilename()); - if (!StringUtils.equalsAnyIgnoreCase(extension, MimeTypeUtils.IMAGE_EXTENSION)) { - return R.fail("文件格式不正确,请上传" + Arrays.toString(MimeTypeUtils.IMAGE_EXTENSION) + "格式"); - } - SysOssVo oss = ossService.upload(avatarfile); - String avatar = oss.getUrl(); - if (userService.updateUserAvatar(LoginHelper.getUserId(), oss.getOssId())) { - AvatarVo avatarVo = new AvatarVo(); - avatarVo.setImgUrl(avatar); - return R.ok(avatarVo); - } - } - return R.fail("上传图片异常,请联系管理员"); - } } diff --git a/src/main/java/org/dromara/system/domain/SysOss.java b/src/main/java/org/dromara/system/domain/SysOss.java deleted file mode 100644 index 3f530a4..0000000 --- a/src/main/java/org/dromara/system/domain/SysOss.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.dromara.system.domain; - -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.dromara.common.mybatis.core.domain.BaseEntity; - -/** - * OSS对象存储对象 - * - * @author Lion Li - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("sys_oss") -public class SysOss extends BaseEntity { - - /** - * 对象存储主键 - */ - @TableId(value = "oss_id") - private Long ossId; - - /** - * 文件名 - */ - private String fileName; - - /** - * 原名 - */ - private String originalName; - - /** - * 文件后缀名 - */ - private String fileSuffix; - - /** - * URL地址 - */ - private String url; - - /** - * 服务商 - */ - private String service; - -} diff --git a/src/main/java/org/dromara/system/domain/SysOssConfig.java b/src/main/java/org/dromara/system/domain/SysOssConfig.java deleted file mode 100644 index 8a9e25e..0000000 --- a/src/main/java/org/dromara/system/domain/SysOssConfig.java +++ /dev/null @@ -1,89 +0,0 @@ -package org.dromara.system.domain; - -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.dromara.common.mybatis.core.domain.BaseEntity; - -/** - * 对象存储配置对象 sys_oss_config - * - * @author Lion Li - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("sys_oss_config") -public class SysOssConfig extends BaseEntity { - - /** - * 主建 - */ - @TableId(value = "oss_config_id") - private Long ossConfigId; - - /** - * 配置key - */ - private String configKey; - - /** - * accessKey - */ - private String accessKey; - - /** - * 秘钥 - */ - private String secretKey; - - /** - * 桶名称 - */ - private String bucketName; - - /** - * 前缀 - */ - private String prefix; - - /** - * 访问站点 - */ - private String endpoint; - - /** - * 自定义域名 - */ - private String domain; - - /** - * 是否https(0否 1是) - */ - private String isHttps; - - /** - * 域 - */ - private String region; - - /** - * 是否默认(0=是,1=否) - */ - private String status; - - /** - * 扩展字段 - */ - private String ext1; - - /** - * 备注 - */ - private String remark; - - /** - * 桶权限类型(0private 1public 2custom) - */ - private String accessPolicy; -} diff --git a/src/main/java/org/dromara/system/domain/bo/SysOssBo.java b/src/main/java/org/dromara/system/domain/bo/SysOssBo.java deleted file mode 100644 index 7cb3104..0000000 --- a/src/main/java/org/dromara/system/domain/bo/SysOssBo.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.dromara.system.domain.bo; - -import org.dromara.common.mybatis.core.domain.BaseEntity; -import org.dromara.system.domain.SysOss; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import lombok.EqualsAndHashCode; - -/** - * OSS对象存储分页查询对象 sys_oss - * - * @author Lion Li - */ -@Data -@EqualsAndHashCode(callSuper = true) -@AutoMapper(target = SysOss.class, reverseConvertGenerate = false) -public class SysOssBo extends BaseEntity { - - /** - * ossId - */ - private Long ossId; - - /** - * 文件名 - */ - private String fileName; - - /** - * 原名 - */ - private String originalName; - - /** - * 文件后缀名 - */ - private String fileSuffix; - - /** - * URL地址 - */ - private String url; - - /** - * 服务商 - */ - private String service; - -} diff --git a/src/main/java/org/dromara/system/domain/bo/SysOssConfigBo.java b/src/main/java/org/dromara/system/domain/bo/SysOssConfigBo.java deleted file mode 100644 index 5887ded..0000000 --- a/src/main/java/org/dromara/system/domain/bo/SysOssConfigBo.java +++ /dev/null @@ -1,109 +0,0 @@ -package org.dromara.system.domain.bo; - -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import org.dromara.system.domain.SysOssConfig; -import io.github.linpeilie.annotations.AutoMapper; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; -import jakarta.validation.constraints.Size; -import lombok.Data; -import lombok.EqualsAndHashCode; - -/** - * 对象存储配置业务对象 sys_oss_config - * - * @author Lion Li - * @author 孤舟烟雨 - * @date 2021-08-13 - */ - -@Data -@EqualsAndHashCode(callSuper = true) -@AutoMapper(target = SysOssConfig.class, reverseConvertGenerate = false) -public class SysOssConfigBo extends BaseEntity { - - /** - * 主建 - */ - @NotNull(message = "主建不能为空", groups = {EditGroup.class}) - private Long ossConfigId; - - /** - * 配置key - */ - @NotBlank(message = "配置key不能为空", groups = {AddGroup.class, EditGroup.class}) - @Size(min = 2, max = 100, message = "configKey长度必须介于{min}和{max} 之间") - private String configKey; - - /** - * accessKey - */ - @NotBlank(message = "accessKey不能为空", groups = {AddGroup.class, EditGroup.class}) - @Size(min = 2, max = 100, message = "accessKey长度必须介于{min}和{max} 之间") - private String accessKey; - - /** - * 秘钥 - */ - @NotBlank(message = "secretKey不能为空", groups = {AddGroup.class, EditGroup.class}) - @Size(min = 2, max = 100, message = "secretKey长度必须介于{min}和{max} 之间") - private String secretKey; - - /** - * 桶名称 - */ - @NotBlank(message = "桶名称不能为空", groups = {AddGroup.class, EditGroup.class}) - @Size(min = 2, max = 100, message = "bucketName长度必须介于{min}和{max}之间") - private String bucketName; - - /** - * 前缀 - */ - private String prefix; - - /** - * 访问站点 - */ - @NotBlank(message = "访问站点不能为空", groups = {AddGroup.class, EditGroup.class}) - @Size(min = 2, max = 100, message = "endpoint长度必须介于{min}和{max}之间") - private String endpoint; - - /** - * 自定义域名 - */ - private String domain; - - /** - * 是否https(Y=是,N=否) - */ - private String isHttps; - - /** - * 是否默认(0=是,1=否) - */ - private String status; - - /** - * 域 - */ - private String region; - - /** - * 扩展字段 - */ - private String ext1; - - /** - * 备注 - */ - private String remark; - - /** - * 桶权限类型(0private 1public 2custom) - */ - @NotBlank(message = "桶权限类型不能为空", groups = {AddGroup.class, EditGroup.class}) - private String accessPolicy; - -} diff --git a/src/main/java/org/dromara/system/domain/vo/SysOssConfigVo.java b/src/main/java/org/dromara/system/domain/vo/SysOssConfigVo.java deleted file mode 100644 index b88ec40..0000000 --- a/src/main/java/org/dromara/system/domain/vo/SysOssConfigVo.java +++ /dev/null @@ -1,97 +0,0 @@ -package org.dromara.system.domain.vo; - -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import org.dromara.system.domain.SysOssConfig; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; - - -/** - * 对象存储配置视图对象 sys_oss_config - * - * @author Lion Li - * @author 孤舟烟雨 - * @date 2021-08-13 - */ -@Data -@ExcelIgnoreUnannotated -@AutoMapper(target = SysOssConfig.class) -public class SysOssConfigVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 主建 - */ - private Long ossConfigId; - - /** - * 配置key - */ - private String configKey; - - /** - * accessKey - */ - private String accessKey; - - /** - * 秘钥 - */ - private String secretKey; - - /** - * 桶名称 - */ - private String bucketName; - - /** - * 前缀 - */ - private String prefix; - - /** - * 访问站点 - */ - private String endpoint; - - /** - * 自定义域名 - */ - private String domain; - - /** - * 是否https(Y=是,N=否) - */ - private String isHttps; - - /** - * 域 - */ - private String region; - - /** - * 是否默认(0=是,1=否) - */ - private String status; - - /** - * 扩展字段 - */ - private String ext1; - - /** - * 备注 - */ - private String remark; - - /** - * 桶权限类型(0private 1public 2custom) - */ - private String accessPolicy; - -} diff --git a/src/main/java/org/dromara/system/domain/vo/SysOssUploadVo.java b/src/main/java/org/dromara/system/domain/vo/SysOssUploadVo.java deleted file mode 100644 index 11e0ff8..0000000 --- a/src/main/java/org/dromara/system/domain/vo/SysOssUploadVo.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.dromara.system.domain.vo; - -import lombok.Data; - -/** - * 上传对象信息 - * - * @author Michelle.Chung - */ -@Data -public class SysOssUploadVo { - - /** - * URL地址 - */ - private String url; - - /** - * 文件名 - */ - private String fileName; - - /** - * 对象存储主键 - */ - private String ossId; - -} diff --git a/src/main/java/org/dromara/system/domain/vo/SysOssVo.java b/src/main/java/org/dromara/system/domain/vo/SysOssVo.java deleted file mode 100644 index 8d5c429..0000000 --- a/src/main/java/org/dromara/system/domain/vo/SysOssVo.java +++ /dev/null @@ -1,72 +0,0 @@ -package org.dromara.system.domain.vo; - -import org.dromara.common.translation.annotation.Translation; -import org.dromara.common.translation.constant.TransConstant; -import org.dromara.system.domain.SysOss; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; -import java.util.Date; - -/** - * OSS对象存储视图对象 sys_oss - * - * @author Lion Li - */ -@Data -@AutoMapper(target = SysOss.class) -public class SysOssVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 对象存储主键 - */ - private Long ossId; - - /** - * 文件名 - */ - private String fileName; - - /** - * 原名 - */ - private String originalName; - - /** - * 文件后缀名 - */ - private String fileSuffix; - - /** - * URL地址 - */ - private String url; - - /** - * 创建时间 - */ - private Date createTime; - - /** - * 上传人 - */ - private Long createBy; - - /** - * 上传人名称 - */ - @Translation(type = TransConstant.USER_ID_TO_NAME, mapper = "createBy") - private String createByName; - - /** - * 服务商 - */ - private String service; - - -} diff --git a/src/main/java/org/dromara/system/mapper/SysOssConfigMapper.java b/src/main/java/org/dromara/system/mapper/SysOssConfigMapper.java deleted file mode 100644 index f93d34d..0000000 --- a/src/main/java/org/dromara/system/mapper/SysOssConfigMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.dromara.system.mapper; - -import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; -import org.dromara.system.domain.SysOssConfig; -import org.dromara.system.domain.vo.SysOssConfigVo; - -/** - * 对象存储配置Mapper接口 - * - * @author Lion Li - * @author 孤舟烟雨 - * @date 2021-08-13 - */ -public interface SysOssConfigMapper extends BaseMapperPlus { - -} diff --git a/src/main/java/org/dromara/system/mapper/SysOssMapper.java b/src/main/java/org/dromara/system/mapper/SysOssMapper.java deleted file mode 100644 index 3da621d..0000000 --- a/src/main/java/org/dromara/system/mapper/SysOssMapper.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.dromara.system.mapper; - -import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; -import org.dromara.system.domain.SysOss; -import org.dromara.system.domain.vo.SysOssVo; - -/** - * 文件上传 数据层 - * - * @author Lion Li - */ -public interface SysOssMapper extends BaseMapperPlus { -} diff --git a/src/main/java/org/dromara/system/runner/SystemApplicationRunner.java b/src/main/java/org/dromara/system/runner/SystemApplicationRunner.java deleted file mode 100644 index 27dad7d..0000000 --- a/src/main/java/org/dromara/system/runner/SystemApplicationRunner.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.dromara.system.runner; - -import org.dromara.system.service.ISysOssConfigService; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.ApplicationArguments; -import org.springframework.boot.ApplicationRunner; -import org.springframework.stereotype.Component; - -/** - * 初始化 system 模块对应业务数据 - * - * @author Lion Li - */ -@Slf4j -@RequiredArgsConstructor -@Component -public class SystemApplicationRunner implements ApplicationRunner { - - private final ISysOssConfigService ossConfigService; - - @Override - public void run(ApplicationArguments args) throws Exception { - ossConfigService.init(); - log.info("初始化OSS配置成功"); - } - -} diff --git a/src/main/java/org/dromara/system/service/ISysOssConfigService.java b/src/main/java/org/dromara/system/service/ISysOssConfigService.java deleted file mode 100644 index a8bc57b..0000000 --- a/src/main/java/org/dromara/system/service/ISysOssConfigService.java +++ /dev/null @@ -1,65 +0,0 @@ -package org.dromara.system.service; - -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.system.domain.bo.SysOssConfigBo; -import org.dromara.system.domain.vo.SysOssConfigVo; - -import java.util.Collection; - -/** - * 对象存储配置Service接口 - * - * @author Lion Li - * @author 孤舟烟雨 - * @date 2021-08-13 - */ -public interface ISysOssConfigService { - - /** - * 初始化OSS配置 - */ - void init(); - - /** - * 查询单个 - */ - SysOssConfigVo queryById(Long ossConfigId); - - /** - * 查询列表 - */ - TableDataInfo queryPageList(SysOssConfigBo bo, PageQuery pageQuery); - - - /** - * 根据新增业务对象插入对象存储配置 - * - * @param bo 对象存储配置新增业务对象 - * @return - */ - Boolean insertByBo(SysOssConfigBo bo); - - /** - * 根据编辑业务对象修改对象存储配置 - * - * @param bo 对象存储配置编辑业务对象 - * @return - */ - Boolean updateByBo(SysOssConfigBo bo); - - /** - * 校验并删除数据 - * - * @param ids 主键集合 - * @param isValid 是否校验,true-删除前校验,false-不校验 - * @return - */ - Boolean deleteWithValidByIds(Collection ids, Boolean isValid); - - /** - * 启用停用状态 - */ - int updateOssConfigStatus(SysOssConfigBo bo); - -} diff --git a/src/main/java/org/dromara/system/service/ISysOssService.java b/src/main/java/org/dromara/system/service/ISysOssService.java deleted file mode 100644 index 2dfe01f..0000000 --- a/src/main/java/org/dromara/system/service/ISysOssService.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.dromara.system.service; - -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.system.domain.bo.SysOssBo; -import org.dromara.system.domain.vo.SysOssVo; -import jakarta.servlet.http.HttpServletResponse; -import org.springframework.web.multipart.MultipartFile; - -import java.io.File; -import java.io.IOException; -import java.util.Collection; -import java.util.List; - -/** - * 文件上传 服务层 - * - * @author Lion Li - */ -public interface ISysOssService { - - TableDataInfo queryPageList(SysOssBo sysOss, PageQuery pageQuery); - - List listByIds(Collection ossIds); - - SysOssVo getById(Long ossId); - - SysOssVo upload(MultipartFile file); - - SysOssVo upload(File file); - - void download(Long ossId, HttpServletResponse response) throws IOException; - - Boolean deleteWithValidByIds(Collection ids, Boolean isValid); - -} diff --git a/src/main/java/org/dromara/system/service/impl/SysOssConfigServiceImpl.java b/src/main/java/org/dromara/system/service/impl/SysOssConfigServiceImpl.java deleted file mode 100644 index 2ecd592..0000000 --- a/src/main/java/org/dromara/system/service/impl/SysOssConfigServiceImpl.java +++ /dev/null @@ -1,176 +0,0 @@ -package org.dromara.system.service.impl; - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.dromara.common.core.constant.CacheNames; -import org.dromara.common.core.exception.ServiceException; -import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.json.utils.JsonUtils; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.oss.constant.OssConstant; -import org.dromara.common.redis.utils.CacheUtils; -import org.dromara.common.redis.utils.RedisUtils; -import org.dromara.system.domain.SysOssConfig; -import org.dromara.system.domain.bo.SysOssConfigBo; -import org.dromara.system.domain.vo.SysOssConfigVo; -import org.dromara.system.mapper.SysOssConfigMapper; -import org.dromara.system.service.ISysOssConfigService; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.Collection; -import java.util.List; - -/** - * 对象存储配置Service业务层处理 - * - * @author Lion Li - * @author 孤舟烟雨 - * @date 2021-08-13 - */ -@Slf4j -@RequiredArgsConstructor -@Service -public class SysOssConfigServiceImpl implements ISysOssConfigService { - - private final SysOssConfigMapper baseMapper; - - /** - * 项目启动时,初始化参数到缓存,加载配置类 - */ - @Override - public void init() { - List list = baseMapper.selectList(); - // 加载OSS初始化配置 - for (SysOssConfig config : list) { - String configKey = config.getConfigKey(); - if ("0".equals(config.getStatus())) { - RedisUtils.setCacheObject(OssConstant.DEFAULT_CONFIG_KEY, configKey); - } - CacheUtils.put(CacheNames.SYS_OSS_CONFIG, config.getConfigKey(), JsonUtils.toJsonString(config)); - } - } - - @Override - public SysOssConfigVo queryById(Long ossConfigId) { - return baseMapper.selectVoById(ossConfigId); - } - - @Override - public TableDataInfo queryPageList(SysOssConfigBo bo, PageQuery pageQuery) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(result); - } - - - private LambdaQueryWrapper buildQueryWrapper(SysOssConfigBo bo) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(StringUtils.isNotBlank(bo.getConfigKey()), SysOssConfig::getConfigKey, bo.getConfigKey()); - lqw.like(StringUtils.isNotBlank(bo.getBucketName()), SysOssConfig::getBucketName, bo.getBucketName()); - lqw.eq(StringUtils.isNotBlank(bo.getStatus()), SysOssConfig::getStatus, bo.getStatus()); - lqw.orderByAsc(SysOssConfig::getOssConfigId); - return lqw; - } - - @Override - public Boolean insertByBo(SysOssConfigBo bo) { - SysOssConfig config = MapstructUtils.convert(bo, SysOssConfig.class); - validEntityBeforeSave(config); - boolean flag = baseMapper.insert(config) > 0; - if (flag) { - // 从数据库查询完整的数据做缓存 - config = baseMapper.selectById(config.getOssConfigId()); - CacheUtils.put(CacheNames.SYS_OSS_CONFIG, config.getConfigKey(), JsonUtils.toJsonString(config)); - } - return flag; - } - - @Override - public Boolean updateByBo(SysOssConfigBo bo) { - SysOssConfig config = MapstructUtils.convert(bo, SysOssConfig.class); - validEntityBeforeSave(config); - LambdaUpdateWrapper luw = new LambdaUpdateWrapper<>(); - luw.set(ObjectUtil.isNull(config.getPrefix()), SysOssConfig::getPrefix, ""); - luw.set(ObjectUtil.isNull(config.getRegion()), SysOssConfig::getRegion, ""); - luw.set(ObjectUtil.isNull(config.getExt1()), SysOssConfig::getExt1, ""); - luw.set(ObjectUtil.isNull(config.getRemark()), SysOssConfig::getRemark, ""); - luw.eq(SysOssConfig::getOssConfigId, config.getOssConfigId()); - boolean flag = baseMapper.update(config, luw) > 0; - if (flag) { - // 从数据库查询完整的数据做缓存 - config = baseMapper.selectById(config.getOssConfigId()); - CacheUtils.put(CacheNames.SYS_OSS_CONFIG, config.getConfigKey(), JsonUtils.toJsonString(config)); - } - return flag; - } - - /** - * 保存前的数据校验 - */ - private void validEntityBeforeSave(SysOssConfig entity) { - if (StringUtils.isNotEmpty(entity.getConfigKey()) - && !checkConfigKeyUnique(entity)) { - throw new ServiceException("操作配置'" + entity.getConfigKey() + "'失败, 配置key已存在!"); - } - } - - @Override - public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if (isValid) { - if (CollUtil.containsAny(ids, OssConstant.SYSTEM_DATA_IDS)) { - throw new ServiceException("系统内置, 不可删除!"); - } - } - List list = CollUtil.newArrayList(); - for (Long configId : ids) { - SysOssConfig config = baseMapper.selectById(configId); - list.add(config); - } - boolean flag = baseMapper.deleteBatchIds(ids) > 0; - if (flag) { - list.forEach(sysOssConfig -> - CacheUtils.evict(CacheNames.SYS_OSS_CONFIG, sysOssConfig.getConfigKey())); - } - return flag; - } - - /** - * 判断configKey是否唯一 - */ - private boolean checkConfigKeyUnique(SysOssConfig sysOssConfig) { - long ossConfigId = ObjectUtil.isNull(sysOssConfig.getOssConfigId()) ? -1L : sysOssConfig.getOssConfigId(); - SysOssConfig info = baseMapper.selectOne(new LambdaQueryWrapper() - .select(SysOssConfig::getOssConfigId, SysOssConfig::getConfigKey) - .eq(SysOssConfig::getConfigKey, sysOssConfig.getConfigKey())); - if (ObjectUtil.isNotNull(info) && info.getOssConfigId() != ossConfigId) { - return false; - } - return true; - } - - /** - * 启用禁用状态 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public int updateOssConfigStatus(SysOssConfigBo bo) { - SysOssConfig sysOssConfig = MapstructUtils.convert(bo, SysOssConfig.class); - int row = baseMapper.update(null, new LambdaUpdateWrapper() - .set(SysOssConfig::getStatus, "1")); - row += baseMapper.updateById(sysOssConfig); - if (row > 0) { - RedisUtils.setCacheObject(OssConstant.DEFAULT_CONFIG_KEY, sysOssConfig.getConfigKey()); - } - return row; - } - -} diff --git a/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java b/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java deleted file mode 100644 index c7d4719..0000000 --- a/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java +++ /dev/null @@ -1,199 +0,0 @@ -package org.dromara.system.service.impl; - -import cn.hutool.core.convert.Convert; -import cn.hutool.core.io.IoUtil; -import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import org.dromara.common.core.constant.CacheNames; -import org.dromara.common.core.exception.ServiceException; -import org.dromara.common.core.service.OssService; -import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.common.core.utils.SpringUtils; -import org.dromara.common.core.utils.StreamUtils; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.core.utils.file.FileUtils; -import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.oss.core.OssClient; -import org.dromara.common.oss.entity.UploadResult; -import org.dromara.common.oss.enumd.AccessPolicyType; -import org.dromara.common.oss.factory.OssFactory; -import org.dromara.system.domain.SysOss; -import org.dromara.system.domain.bo.SysOssBo; -import org.dromara.system.domain.vo.SysOssVo; -import org.dromara.system.mapper.SysOssMapper; -import org.dromara.system.service.ISysOssService; -import jakarta.servlet.http.HttpServletResponse; -import lombok.RequiredArgsConstructor; -import org.jetbrains.annotations.NotNull; -import org.springframework.cache.annotation.Cacheable; -import org.springframework.http.MediaType; -import org.springframework.stereotype.Service; -import org.springframework.web.multipart.MultipartFile; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.util.*; - -/** - * 文件上传 服务层实现 - * - * @author Lion Li - */ -@RequiredArgsConstructor -@Service -public class SysOssServiceImpl implements ISysOssService, OssService { - - private final SysOssMapper baseMapper; - - @Override - public TableDataInfo queryPageList(SysOssBo bo, PageQuery pageQuery) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); - List filterResult = StreamUtils.toList(result.getRecords(), this::matchingUrl); - result.setRecords(filterResult); - return TableDataInfo.build(result); - } - - @Override - public List listByIds(Collection ossIds) { - List list = new ArrayList<>(); - for (Long id : ossIds) { - SysOssVo vo = SpringUtils.getAopProxy(this).getById(id); - if (ObjectUtil.isNotNull(vo)) { - try { - list.add(this.matchingUrl(vo)); - } catch (Exception ignored) { - // 如果oss异常无法连接则将数据直接返回 - list.add(vo); - } - } - } - return list; - } - - @Override - public String selectUrlByIds(String ossIds) { - List list = new ArrayList<>(); - for (Long id : StringUtils.splitTo(ossIds, Convert::toLong)) { - SysOssVo vo = SpringUtils.getAopProxy(this).getById(id); - if (ObjectUtil.isNotNull(vo)) { - try { - list.add(this.matchingUrl(vo).getUrl()); - } catch (Exception ignored) { - // 如果oss异常无法连接则将数据直接返回 - list.add(vo.getUrl()); - } - } - } - return String.join(StringUtils.SEPARATOR, list); - } - - private LambdaQueryWrapper buildQueryWrapper(SysOssBo bo) { - Map params = bo.getParams(); - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.like(StringUtils.isNotBlank(bo.getFileName()), SysOss::getFileName, bo.getFileName()); - lqw.like(StringUtils.isNotBlank(bo.getOriginalName()), SysOss::getOriginalName, bo.getOriginalName()); - lqw.eq(StringUtils.isNotBlank(bo.getFileSuffix()), SysOss::getFileSuffix, bo.getFileSuffix()); - lqw.eq(StringUtils.isNotBlank(bo.getUrl()), SysOss::getUrl, bo.getUrl()); - lqw.between(params.get("beginCreateTime") != null && params.get("endCreateTime") != null, - SysOss::getCreateTime, params.get("beginCreateTime"), params.get("endCreateTime")); - lqw.eq(ObjectUtil.isNotNull(bo.getCreateBy()), SysOss::getCreateBy, bo.getCreateBy()); - lqw.eq(StringUtils.isNotBlank(bo.getService()), SysOss::getService, bo.getService()); - lqw.orderByAsc(SysOss::getOssId); - return lqw; - } - - @Cacheable(cacheNames = CacheNames.SYS_OSS, key = "#ossId") - @Override - public SysOssVo getById(Long ossId) { - return baseMapper.selectVoById(ossId); - } - - @Override - public void download(Long ossId, HttpServletResponse response) throws IOException { - SysOssVo sysOss = SpringUtils.getAopProxy(this).getById(ossId); - if (ObjectUtil.isNull(sysOss)) { - throw new ServiceException("文件数据不存在!"); - } - FileUtils.setAttachmentResponseHeader(response, sysOss.getOriginalName()); - response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE + "; charset=UTF-8"); - OssClient storage = OssFactory.instance(sysOss.getService()); - try(InputStream inputStream = storage.getObjectContent(sysOss.getUrl())) { - int available = inputStream.available(); - IoUtil.copy(inputStream, response.getOutputStream(), available); - response.setContentLength(available); - } catch (Exception e) { - throw new ServiceException(e.getMessage()); - } - } - - @Override - public SysOssVo upload(MultipartFile file) { - String originalfileName = file.getOriginalFilename(); - String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length()); - OssClient storage = OssFactory.instance(); - UploadResult uploadResult; - try { - uploadResult = storage.uploadSuffix(file.getBytes(), suffix, file.getContentType()); - } catch (IOException e) { - throw new ServiceException(e.getMessage()); - } - // 保存文件信息 - return buildResultEntity(originalfileName, suffix, storage.getConfigKey(), uploadResult); - } - - @Override - public SysOssVo upload(File file) { - String originalfileName = file.getName(); - String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length()); - OssClient storage = OssFactory.instance(); - UploadResult uploadResult = storage.uploadSuffix(file, suffix); - // 保存文件信息 - return buildResultEntity(originalfileName, suffix, storage.getConfigKey(), uploadResult); - } - - @NotNull - private SysOssVo buildResultEntity(String originalfileName, String suffix, String configKey, UploadResult uploadResult) { - SysOss oss = new SysOss(); - oss.setUrl(uploadResult.getUrl()); - oss.setFileSuffix(suffix); - oss.setFileName(uploadResult.getFilename()); - oss.setOriginalName(originalfileName); - oss.setService(configKey); - baseMapper.insert(oss); - SysOssVo sysOssVo = MapstructUtils.convert(oss, SysOssVo.class); - return this.matchingUrl(sysOssVo); - } - - @Override - public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if (isValid) { - // 做一些业务上的校验,判断是否需要校验 - } - List list = baseMapper.selectBatchIds(ids); - for (SysOss sysOss : list) { - OssClient storage = OssFactory.instance(sysOss.getService()); - storage.delete(sysOss.getUrl()); - } - return baseMapper.deleteBatchIds(ids) > 0; - } - - /** - * 匹配Url - * - * @param oss OSS对象 - * @return oss 匹配Url的OSS对象 - */ - private SysOssVo matchingUrl(SysOssVo oss) { - OssClient storage = OssFactory.instance(oss.getService()); - // 仅修改桶类型为 private 的URL,临时URL时长为120s - if (AccessPolicyType.PRIVATE == storage.getAccessPolicy()) { - oss.setUrl(storage.getPrivateUrl(oss.getFileName(), 120)); - } - return oss; - } -}