From 089e288a6e55d2ae527ad733bbb8b8b5eaad6107 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Sun, 18 Jul 2021 18:20:21 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E4=BD=BF=E7=94=A8=20=E7=AD=96?= =?UTF-8?q?=E7=95=A5+=E5=B7=A5=E5=8E=82=20=E9=87=8D=E5=86=99OSS=E6=A8=A1?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-oss/pom.xml | 4 + .../ruoyi/oss/config/CloudStorageConfig.java | 69 --------- .../com/ruoyi/oss/constant/CloudConstant.java | 39 +---- .../ruoyi/oss/enumd/CloudServiceEnumd.java | 36 +++++ .../com/ruoyi/oss/factory/OssFactory.java | 40 ++++++ .../oss/properties/AliyunProperties.java | 40 ++++++ .../properties/CloudStorageProperties.java | 25 ++++ .../ruoyi/oss/properties/MinioProperties.java | 40 ++++++ .../oss/properties/QcloudProperties.java | 45 ++++++ .../ruoyi/oss/properties/QiniuProperties.java | 40 ++++++ .../oss/service/ICloudStorageService.java | 10 ++ .../AbstractCloudStorageService.java | 47 ++++-- .../impl/AliyunCloudStorageServiceImpl.java | 54 +++++-- .../impl/MinioCloudStorageServiceImpl.java | 54 ++++--- .../impl/QcloudCloudStorageServiceImpl.java | 66 +++++---- .../impl/QiniuCloudStorageServiceImpl.java | 66 +++++---- .../java/com/ruoyi/oss/utils/DateUtils.java | 135 ------------------ .../system/controller/SysOssController.java | 52 ++++--- .../java/com/ruoyi/system/domain/SysOss.java | 31 +++- .../com/ruoyi/system/factory/OSSFactory.java | 31 ---- .../com/ruoyi/system/mapper/SysOssMapper.java | 3 +- .../ruoyi/system/service/ISysOssService.java | 16 +-- .../service/impl/SysOssServiceImpl.java | 54 ++++--- .../resources/mapper/system/SysOssMapper.xml | 25 ++-- ruoyi-oss/src/main/resources/sql/oss.sql | 30 ---- sql/oss.sql | 24 ++++ 26 files changed, 602 insertions(+), 474 deletions(-) delete mode 100644 ruoyi-oss/src/main/java/com/ruoyi/oss/config/CloudStorageConfig.java create mode 100644 ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/CloudServiceEnumd.java create mode 100644 ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java create mode 100644 ruoyi-oss/src/main/java/com/ruoyi/oss/properties/AliyunProperties.java create mode 100644 ruoyi-oss/src/main/java/com/ruoyi/oss/properties/CloudStorageProperties.java create mode 100644 ruoyi-oss/src/main/java/com/ruoyi/oss/properties/MinioProperties.java create mode 100644 ruoyi-oss/src/main/java/com/ruoyi/oss/properties/QcloudProperties.java create mode 100644 ruoyi-oss/src/main/java/com/ruoyi/oss/properties/QiniuProperties.java delete mode 100644 ruoyi-oss/src/main/java/com/ruoyi/oss/utils/DateUtils.java delete mode 100644 ruoyi-oss/src/main/java/com/ruoyi/system/factory/OSSFactory.java delete mode 100644 ruoyi-oss/src/main/resources/sql/oss.sql create mode 100644 sql/oss.sql diff --git a/ruoyi-oss/pom.xml b/ruoyi-oss/pom.xml index ad8197c1..9d9fe211 100644 --- a/ruoyi-oss/pom.xml +++ b/ruoyi-oss/pom.xml @@ -22,6 +22,10 @@ com.ruoyi ruoyi-common + + com.ruoyi + ruoyi-system + com.qiniu diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/config/CloudStorageConfig.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/config/CloudStorageConfig.java deleted file mode 100644 index c0f7ee9d..00000000 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/config/CloudStorageConfig.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.ruoyi.oss.config; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -import java.io.Serializable; - -/** - * 云存储配置信息 - */ -@Data -@Configuration -@ConfigurationProperties(prefix = "cloud-storage") -public class CloudStorageConfig implements Serializable { - - private static final long serialVersionUID = 1L; - - /** - * 类型 1:七牛 2:阿里云 3:腾讯云 4: minio - */ - private Integer type; - - /** - * 七牛绑定的域名 - */ - private String domain; - - /** - * 七牛路径前缀 - */ - private String prefix; - - /** - * 七牛ACCESS_KEY - */ - private String accessKey; - - /** - * 七牛SECRET_KEY - */ - private String secretKey; - - /** - * 七牛存储空间名 - */ - private String bucketName; - - /** - * 腾讯云AppId - */ - private Integer qcloudAppId; - - /** - * 腾讯云SecretId - */ - private String qcloudSecretId; - - /** - * 腾讯云SecretKey - */ - private String qcloudSecretKey; - - /** - * 腾讯云COS所属地区 - */ - private String qcloudRegion; - -} diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/constant/CloudConstant.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/constant/CloudConstant.java index ac4dff55..fcb2ef8b 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/constant/CloudConstant.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/constant/CloudConstant.java @@ -1,43 +1,16 @@ package com.ruoyi.oss.constant; -import lombok.AllArgsConstructor; -import lombok.Getter; - - +/** + * 云存储常量 + * + * @author Lion Li + */ public class CloudConstant { /** * 云存储配置KEY */ - public final static String CLOUD_STORAGE_CONFIG_KEY = "sys.oss.cloud-storage"; + public final static String CLOUD_STORAGE_CONFIG_KEY = "sys.oss.cloudStorageService"; - /** - * 云服务商 - */ - @Getter - @AllArgsConstructor - public enum CloudService { - /** - * 七牛云 - */ - QINIU(1), - - /** - * 阿里云 - */ - ALIYUN(2), - - /** - * 腾讯云 - */ - QCLOUD(3), - - /** - * minio - */ - MINIO(4); - - private final int value; - } } diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/CloudServiceEnumd.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/CloudServiceEnumd.java new file mode 100644 index 00000000..56e09064 --- /dev/null +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/CloudServiceEnumd.java @@ -0,0 +1,36 @@ +package com.ruoyi.oss.enumd; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 云存储服务商枚举 + * + * @author LionLi + */ +@Getter +@AllArgsConstructor +public enum CloudServiceEnumd { + + /** + * 七牛云 + */ + QINIU("qiniu"), + + /** + * 阿里云 + */ + ALIYUN("aliyun"), + + /** + * 腾讯云 + */ + QCLOUD("qcloud"), + + /** + * minio + */ + MINIO("minio"); + + private final String value; +} diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java new file mode 100644 index 00000000..b549d218 --- /dev/null +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java @@ -0,0 +1,40 @@ +package com.ruoyi.oss.factory; + +import cn.hutool.core.lang.Assert; +import com.ruoyi.common.utils.spring.SpringUtils; +import com.ruoyi.oss.constant.CloudConstant; +import com.ruoyi.oss.service.ICloudStorageService; +import com.ruoyi.system.service.ISysConfigService; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 文件上传Factory + * + * @author Lion Li + */ +public class OssFactory { + + private static ISysConfigService sysConfigService; + + static { + OssFactory.sysConfigService = SpringUtils.getBean(ISysConfigService.class); + } + + private static final Map SERVICES = new ConcurrentHashMap<>(); + + public static ICloudStorageService instance() { + String type = sysConfigService.selectConfigByKey(CloudConstant.CLOUD_STORAGE_CONFIG_KEY); + return SERVICES.get(type); + } + + public static ICloudStorageService instance(String type) { + return SERVICES.get(type); + } + + public static void register(String type, ICloudStorageService iCloudStorageService) { + Assert.notNull(type, "type can't be null"); + SERVICES.put(type, iCloudStorageService); + } +} diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/AliyunProperties.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/AliyunProperties.java new file mode 100644 index 00000000..b642f9cc --- /dev/null +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/AliyunProperties.java @@ -0,0 +1,40 @@ +package com.ruoyi.oss.properties; + +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 阿里云 配置属性 + * + * @author Lion Li + */ +@Data +@NoArgsConstructor +public class AliyunProperties { + + /** + * 阿里云绑定的域名 + */ + private String endpoint; + + /** + * 阿里云路径前缀 + */ + private String prefix; + + /** + * 阿里云AccessKeyId + */ + private String accessKeyId; + + /** + * 阿里云AccessKeySecret + */ + private String accessKeySecret; + + /** + * 阿里云BucketName + */ + private String bucketName; + +} diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/CloudStorageProperties.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/CloudStorageProperties.java new file mode 100644 index 00000000..b8c38c11 --- /dev/null +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/CloudStorageProperties.java @@ -0,0 +1,25 @@ +package com.ruoyi.oss.properties; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * OSS云存储 配置属性 + * + * @author Lion Li + */ +@Data +@Component +@ConfigurationProperties(prefix = "cloud-storage") +public class CloudStorageProperties { + + private QiniuProperties qiniu; + + private AliyunProperties aliyun; + + private QcloudProperties qcloud; + + private MinioProperties minio; + +} diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/MinioProperties.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/MinioProperties.java new file mode 100644 index 00000000..94313d45 --- /dev/null +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/MinioProperties.java @@ -0,0 +1,40 @@ +package com.ruoyi.oss.properties; + +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * Minio 配置属性 + * + * @author Lion Li + */ +@Data +@NoArgsConstructor +public class MinioProperties { + + /** + * 七牛绑定的域名 + */ + private String endpoint; + + /** + * 七牛路径前缀 + */ + private String prefix; + + /** + * 七牛ACCESS_KEY + */ + private String accessKey; + + /** + * 七牛SECRET_KEY + */ + private String secretKey; + + /** + * 七牛存储空间名 + */ + private String bucketName; + +} diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/QcloudProperties.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/QcloudProperties.java new file mode 100644 index 00000000..c6d17d9a --- /dev/null +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/QcloudProperties.java @@ -0,0 +1,45 @@ +package com.ruoyi.oss.properties; + +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 腾讯云COS 配置属性 + * + * @author Lion Li + */ +@Data +@NoArgsConstructor +public class QcloudProperties { + + /** + * 腾讯云绑定的域名 + */ + private String domain; + + /** + * 腾讯云路径前缀 + */ + private String prefix; + + /** + * 腾讯云SecretId + */ + private String secretId; + + /** + * 腾讯云SecretKey + */ + private String secretKey; + + /** + * 腾讯云BucketName + */ + private String bucketName; + + /** + * 腾讯云COS所属地区 + */ + private String region; + +} diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/QiniuProperties.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/QiniuProperties.java new file mode 100644 index 00000000..f671c5ab --- /dev/null +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/QiniuProperties.java @@ -0,0 +1,40 @@ +package com.ruoyi.oss.properties; + +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 七牛云 配置属性 + * + * @author Lion Li + */ +@Data +@NoArgsConstructor +public class QiniuProperties { + + /** + * 七牛绑定的域名 + */ + private String domain; + + /** + * 七牛路径前缀 + */ + private String prefix; + + /** + * 七牛ACCESS_KEY + */ + private String accessKey; + + /** + * 七牛SECRET_KEY + */ + private String secretKey; + + /** + * 七牛存储空间名 + */ + private String bucketName; + +} diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageService.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageService.java index 19d623ac..a6a29c7c 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageService.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageService.java @@ -2,8 +2,18 @@ package com.ruoyi.oss.service; import java.io.InputStream; +/** + * 云存储服务接口 + * + * @author Lion Li + */ public interface ICloudStorageService { + /** + * 获取服务商类型 + */ + String getServiceType(); + /** * 文件路径 * diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageService.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageService.java index cbdbd93f..a154670e 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageService.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageService.java @@ -1,36 +1,55 @@ package com.ruoyi.oss.service.abstractd; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; -import com.ruoyi.oss.config.CloudStorageConfig; import com.ruoyi.oss.service.ICloudStorageService; -import com.ruoyi.oss.utils.DateUtils; +import org.springframework.beans.factory.InitializingBean; -import java.util.UUID; +import java.io.InputStream; +import java.util.Date; /** * 云存储(支持七牛、阿里云、腾讯云、minio) + * + * @author Lion Li */ -public abstract class AbstractCloudStorageService implements ICloudStorageService { +public abstract class AbstractCloudStorageService implements ICloudStorageService, InitializingBean { - /** - * 云存储配置信息 - */ - protected CloudStorageConfig config; - - public int getServiceType() { - return config.getType(); - } + @Override + public abstract String getServiceType(); @Override public String getPath(String prefix, String suffix) { // 生成uuid - String uuid = UUID.randomUUID().toString().replaceAll("-", ""); + String uuid = IdUtil.fastSimpleUUID(); // 文件路径 - String path = DateUtils.dateTime() + "/" + uuid; + String path = DateUtil.format(new Date(), "yyyyMMdd") + "/" + uuid; if (StrUtil.isNotBlank(prefix)) { path = prefix + "/" + path; } return path + suffix; } + @Override + public abstract String upload(byte[] data, String path); + + @Override + public abstract void delete(String path); + + @Override + public String upload(InputStream inputStream, String path) { + byte[] data = IoUtil.readBytes(inputStream); + return this.upload(data, path); + } + + @Override + public abstract String uploadSuffix(byte[] data, String suffix); + + @Override + public abstract String uploadSuffix(InputStream inputStream, String suffix); + + @Override + public abstract void afterPropertiesSet() throws Exception; } diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunCloudStorageServiceImpl.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunCloudStorageServiceImpl.java index 8fbe16c2..a0782fee 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunCloudStorageServiceImpl.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunCloudStorageServiceImpl.java @@ -1,28 +1,47 @@ package com.ruoyi.oss.service.impl; +import com.aliyun.oss.ClientConfiguration; import com.aliyun.oss.OSSClient; -import com.ruoyi.oss.config.CloudStorageConfig; +import com.aliyun.oss.common.auth.DefaultCredentialProvider; +import com.ruoyi.oss.enumd.CloudServiceEnumd; import com.ruoyi.oss.exception.OssException; +import com.ruoyi.oss.factory.OssFactory; +import com.ruoyi.oss.properties.AliyunProperties; +import com.ruoyi.oss.properties.CloudStorageProperties; import com.ruoyi.oss.service.abstractd.AbstractCloudStorageService; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; import java.io.ByteArrayInputStream; import java.io.InputStream; /** * 阿里云存储 + * + * @author Lion Li */ -public class AliyunCloudStorageServiceImpl extends AbstractCloudStorageService { +@Lazy +@Service +public class AliyunCloudStorageServiceImpl extends AbstractCloudStorageService implements InitializingBean { - private OSSClient client; + private final OSSClient client; + private final AliyunProperties properties; - public AliyunCloudStorageServiceImpl(CloudStorageConfig config) { - this.config = config; - // 初始化 - init(); + @Autowired + public AliyunCloudStorageServiceImpl(CloudStorageProperties properties) { + this.properties = properties.getAliyun(); + ClientConfiguration configuration = new ClientConfiguration(); + DefaultCredentialProvider credentialProvider = new DefaultCredentialProvider( + this.properties.getAccessKeyId(), + this.properties.getAccessKeySecret()); + client = new OSSClient(this.properties.getEndpoint(), credentialProvider, configuration); } - private void init() { - client = new OSSClient(config.getDomain(), config.getAccessKey(), config.getSecretKey()); + @Override + public String getServiceType() { + return CloudServiceEnumd.ALIYUN.getValue(); } @Override @@ -33,18 +52,18 @@ public class AliyunCloudStorageServiceImpl extends AbstractCloudStorageService { @Override public String upload(InputStream inputStream, String path) { try { - client.putObject(config.getBucketName(), path, inputStream); + client.putObject(this.properties.getBucketName(), path, inputStream); } catch (Exception e) { throw new OssException("上传文件失败,请检查配置信息"); } - return config.getDomain() + "/" + path; + return this.properties.getEndpoint() + "/" + path; } @Override public void delete(String path) { - path = path.replace(config.getDomain() + "/", ""); + path = path.replace(this.properties.getEndpoint() + "/", ""); try { - client.deleteObject(config.getBucketName(), path); + client.deleteObject(this.properties.getBucketName(), path); } catch (Exception e) { throw new OssException("上传文件失败,请检查配置信息"); } @@ -52,11 +71,16 @@ public class AliyunCloudStorageServiceImpl extends AbstractCloudStorageService { @Override public String uploadSuffix(byte[] data, String suffix) { - return upload(data, getPath(config.getPrefix(), suffix)); + return upload(data, getPath(this.properties.getPrefix(), suffix)); } @Override public String uploadSuffix(InputStream inputStream, String suffix) { - return upload(inputStream, getPath(config.getPrefix(), suffix)); + return upload(inputStream, getPath(this.properties.getPrefix(), suffix)); + } + + @Override + public void afterPropertiesSet() throws Exception { + OssFactory.register(getServiceType(),this); } } diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageServiceImpl.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageServiceImpl.java index bf02831d..480f5e9e 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageServiceImpl.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageServiceImpl.java @@ -1,31 +1,43 @@ package com.ruoyi.oss.service.impl; -import cn.hutool.core.io.IoUtil; -import com.ruoyi.oss.config.CloudStorageConfig; +import com.ruoyi.oss.enumd.CloudServiceEnumd; import com.ruoyi.oss.exception.OssException; +import com.ruoyi.oss.factory.OssFactory; +import com.ruoyi.oss.properties.CloudStorageProperties; +import com.ruoyi.oss.properties.MinioProperties; import com.ruoyi.oss.service.abstractd.AbstractCloudStorageService; import io.minio.MinioClient; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; import java.io.InputStream; /** * minio存储 + * + * @author Lion Li */ -public class MinioCloudStorageServiceImpl extends AbstractCloudStorageService { +@Lazy +@Service +public class MinioCloudStorageServiceImpl extends AbstractCloudStorageService implements InitializingBean { - private MinioClient minioClient; + private final MinioClient minioClient; + private final MinioProperties properties; - public MinioCloudStorageServiceImpl(CloudStorageConfig config) { - this.config = config; - // 初始化 - init(); + @Autowired + public MinioCloudStorageServiceImpl(CloudStorageProperties properties) { + this.properties = properties.getMinio(); + minioClient = MinioClient.builder() + .endpoint(this.properties.getEndpoint()) + .credentials(this.properties.getAccessKey(), this.properties.getSecretKey()) + .build(); } - private void init() { - minioClient = MinioClient.builder() - .endpoint(config.getDomain()) - .credentials(config.getAccessKey(), config.getSecretKey()) - .build(); + @Override + public String getServiceType() { + return CloudServiceEnumd.MINIO.getValue(); } @Override @@ -35,7 +47,7 @@ public class MinioCloudStorageServiceImpl extends AbstractCloudStorageService { } catch (Exception e) { throw new OssException("上传文件失败,请核对Minio配置信息"); } - return config.getDomain() + "/" + path; + return this.properties.getEndpoint() + "/" + path; } @Override @@ -47,20 +59,18 @@ public class MinioCloudStorageServiceImpl extends AbstractCloudStorageService { } } - @Override - public String upload(InputStream inputStream, String path) { - byte[] data = IoUtil.readBytes(inputStream); - return this.upload(data, path); - } - @Override public String uploadSuffix(byte[] data, String suffix) { - return upload(data, getPath(config.getPrefix(), suffix)); + return upload(data, getPath(this.properties.getPrefix(), suffix)); } @Override public String uploadSuffix(InputStream inputStream, String suffix) { - return upload(inputStream, getPath(config.getPrefix(), suffix)); + return upload(inputStream, getPath(this.properties.getPrefix(), suffix)); } + @Override + public void afterPropertiesSet() throws Exception { + OssFactory.register(getServiceType(),this); + } } diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudCloudStorageServiceImpl.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudCloudStorageServiceImpl.java index 66813101..4cc7bf21 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudCloudStorageServiceImpl.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudCloudStorageServiceImpl.java @@ -1,33 +1,50 @@ package com.ruoyi.oss.service.impl; -import cn.hutool.core.io.IoUtil; import com.qcloud.cos.COSClient; -import com.ruoyi.oss.config.CloudStorageConfig; +import com.qcloud.cos.ClientConfig; +import com.qcloud.cos.auth.BasicCOSCredentials; +import com.qcloud.cos.auth.COSCredentials; +import com.qcloud.cos.region.Region; +import com.ruoyi.oss.enumd.CloudServiceEnumd; +import com.ruoyi.oss.factory.OssFactory; +import com.ruoyi.oss.properties.CloudStorageProperties; +import com.ruoyi.oss.properties.QcloudProperties; import com.ruoyi.oss.service.abstractd.AbstractCloudStorageService; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; import java.io.InputStream; /** * 腾讯云存储 + * + * @author Lion Li */ -public class QcloudCloudStorageServiceImpl extends AbstractCloudStorageService { +@Lazy +@Service +public class QcloudCloudStorageServiceImpl extends AbstractCloudStorageService implements InitializingBean { - private COSClient client; + private final COSClient client; + private final QcloudProperties properties; - public QcloudCloudStorageServiceImpl(CloudStorageConfig config) { - this.config = config; - // 初始化 - init(); + @Autowired + public QcloudCloudStorageServiceImpl(CloudStorageProperties properties) { + this.properties = properties.getQcloud(); + COSCredentials credentials = new BasicCOSCredentials( + this.properties.getSecretId(), + this.properties.getSecretKey()); + // 初始化客户端配置 + ClientConfig clientConfig = new ClientConfig(); + // 设置bucket所在的区域,华南:gz 华北:tj 华东:sh + clientConfig.setRegion(new Region(this.properties.getRegion())); + client = new COSClient(credentials, clientConfig); } - private void init() { -// Credentials credentials = new Credentials(config.getQcloudAppId(), config.getQcloudSecretId(), -// config.getQcloudSecretKey()); -// 初始化客户端配置 -// ClientConfig clientConfig = new ClientConfig(); -// // 设置bucket所在的区域,华南:gz 华北:tj 华东:sh -// clientConfig.setRegion(config.getQcloudRegion()); -// client = new COSClient(clientConfig, credentials); + @Override + public String getServiceType() { + return CloudServiceEnumd.QCLOUD.getValue(); } @Override @@ -43,7 +60,7 @@ public class QcloudCloudStorageServiceImpl extends AbstractCloudStorageService { // if (Convert.toInt(jsonObject.get("code")) != 0) { // throw new OssException("文件上传失败," + Convert.toStr(jsonObject.get("message"))); // } - return config.getDomain() + path; + return this.properties.getDomain() + path; } @Override @@ -57,21 +74,18 @@ public class QcloudCloudStorageServiceImpl extends AbstractCloudStorageService { // } } - - @Override - public String upload(InputStream inputStream, String path) { - byte[] data = IoUtil.readBytes(inputStream); - return this.upload(data, path); - } - @Override public String uploadSuffix(byte[] data, String suffix) { - return upload(data, getPath(config.getPrefix(), suffix)); + return upload(data, getPath(this.properties.getPrefix(), suffix)); } @Override public String uploadSuffix(InputStream inputStream, String suffix) { - return upload(inputStream, getPath(config.getPrefix(), suffix)); + return upload(inputStream, getPath(this.properties.getPrefix(), suffix)); } + @Override + public void afterPropertiesSet() throws Exception { + OssFactory.register(getServiceType(),this); + } } diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageServiceImpl.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageServiceImpl.java index 97a493f7..a8c93939 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageServiceImpl.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageServiceImpl.java @@ -1,44 +1,59 @@ package com.ruoyi.oss.service.impl; -import cn.hutool.core.io.IoUtil; import com.qiniu.http.Response; import com.qiniu.storage.BucketManager; import com.qiniu.storage.Configuration; import com.qiniu.storage.Region; import com.qiniu.storage.UploadManager; import com.qiniu.util.Auth; -import com.ruoyi.oss.config.CloudStorageConfig; +import com.ruoyi.oss.enumd.CloudServiceEnumd; import com.ruoyi.oss.exception.OssException; +import com.ruoyi.oss.factory.OssFactory; +import com.ruoyi.oss.properties.CloudStorageProperties; +import com.ruoyi.oss.properties.QiniuProperties; import com.ruoyi.oss.service.abstractd.AbstractCloudStorageService; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; import java.io.InputStream; /** * 七牛云存储 + * + * @author Lion Li */ -public class QiniuCloudStorageServiceImpl extends AbstractCloudStorageService { +@Lazy +@Service +public class QiniuCloudStorageServiceImpl extends AbstractCloudStorageService implements InitializingBean { - private UploadManager uploadManager; - private BucketManager bucketManager; - private String token; + private final UploadManager uploadManager; + private final BucketManager bucketManager; + private final String token; + private final QiniuProperties properties; - public QiniuCloudStorageServiceImpl(CloudStorageConfig config) { - this.config = config; - // 初始化 - init(); - } - - private void init() { + @Autowired + public QiniuCloudStorageServiceImpl(CloudStorageProperties properties) { + this.properties = properties.getQiniu(); // z0 z1 z2 Configuration config = new Configuration(Region.autoRegion()); // 默认不使用https config.useHttpsDomains = false; uploadManager = new UploadManager(config); - Auth auth = Auth.create(this.config.getAccessKey(), this.config.getSecretKey()); - token = auth.uploadToken(this.config.getBucketName()); + Auth auth = Auth.create( + this.properties.getAccessKey(), + this.properties.getSecretKey()); + token = auth.uploadToken(this.properties.getBucketName()); bucketManager = new BucketManager(auth, config); } + + @Override + public String getServiceType() { + return CloudServiceEnumd.QINIU.getValue(); + } + @Override public String upload(byte[] data, String path) { try { @@ -49,14 +64,14 @@ public class QiniuCloudStorageServiceImpl extends AbstractCloudStorageService { } catch (Exception e) { throw new OssException("上传文件失败,请核对七牛配置信息"); } - return config.getDomain() + "/" + path; + return this.properties.getDomain() + "/" + path; } @Override public void delete(String path) { try { - path = path.replace(config.getDomain() + "/", ""); - Response res = bucketManager.delete(config.getBucketName(), path); + path = path.replace(this.properties.getDomain() + "/", ""); + Response res = bucketManager.delete(this.properties.getBucketName(), path); if (!res.isOK()) { throw new RuntimeException("删除七牛文件出错:" + res.toString()); } @@ -65,20 +80,19 @@ public class QiniuCloudStorageServiceImpl extends AbstractCloudStorageService { } } - @Override - public String upload(InputStream inputStream, String path) { - byte[] data = IoUtil.readBytes(inputStream); - return this.upload(data, path); - } - @Override public String uploadSuffix(byte[] data, String suffix) { - return upload(data, getPath(config.getPrefix(), suffix)); + return upload(data, getPath(this.properties.getPrefix(), suffix)); } @Override public String uploadSuffix(InputStream inputStream, String suffix) { - return upload(inputStream, getPath(config.getPrefix(), suffix)); + return upload(inputStream, getPath(this.properties.getPrefix(), suffix)); + } + + @Override + public void afterPropertiesSet() throws Exception { + OssFactory.register(getServiceType(),this); } } diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/utils/DateUtils.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/utils/DateUtils.java deleted file mode 100644 index eac88e8f..00000000 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/utils/DateUtils.java +++ /dev/null @@ -1,135 +0,0 @@ -package com.ruoyi.oss.utils; - -import org.apache.commons.lang3.time.DateFormatUtils; - -import java.lang.management.ManagementFactory; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; - -/** - * 时间工具类 - * - * @author ruoyi - */ -public class DateUtils extends org.apache.commons.lang3.time.DateUtils { - public static String YYYY = "yyyy"; - - public static String YYYY_MM = "yyyy-MM"; - - public static String YYYY_MM_DD = "yyyy-MM-dd"; - - public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss"; - - public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; - - private static String[] parsePatterns = { - "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", - "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", - "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"}; - - /** - * 获取当前Date型日期 - * - * @return Date() 当前日期 - */ - public static Date getNowDate() { - return new Date(); - } - - /** - * 获取当前日期, 默认格式为yyyy-MM-dd - * - * @return String - */ - public static String getDate() { - return dateTimeNow(YYYY_MM_DD); - } - - public static final String getTime() { - return dateTimeNow(YYYY_MM_DD_HH_MM_SS); - } - - public static final String dateTimeNow() { - return dateTimeNow(YYYYMMDDHHMMSS); - } - - public static final String dateTimeNow(final String format) { - return parseDateToStr(format, new Date()); - } - - public static final String dateTime(final Date date) { - return parseDateToStr(YYYY_MM_DD, date); - } - - public static final String parseDateToStr(final String format, final Date date) { - return new SimpleDateFormat(format).format(date); - } - - public static final Date dateTime(final String format, final String ts) { - try { - return new SimpleDateFormat(format).parse(ts); - } catch (ParseException e) { - throw new RuntimeException(e); - } - } - - /** - * 日期路径 即年/月/日 如2018/08/08 - */ - public static final String datePath() { - Date now = new Date(); - return DateFormatUtils.format(now, "yyyy/MM/dd"); - } - - /** - * 日期路径 即年/月/日 如20180808 - */ - public static final String dateTime() { - Date now = new Date(); - return DateFormatUtils.format(now, "yyyyMMdd"); - } - - /** - * 日期型字符串转化为日期 格式 - */ - public static Date parseDate(Object str) { - if (str == null) { - return null; - } - try { - return parseDate(str.toString(), parsePatterns); - } catch (ParseException e) { - return null; - } - } - - /** - * 获取服务器启动时间 - */ - public static Date getServerStartDate() { - long time = ManagementFactory.getRuntimeMXBean().getStartTime(); - return new Date(time); - } - - /** - * 计算两个时间差 - */ - public static String getDatePoor(Date endDate, Date nowDate) { - long nd = 1000 * 24 * 60 * 60; - long nh = 1000 * 60 * 60; - long nm = 1000 * 60; - // long ns = 1000; - // 获得两个时间的毫秒时间差异 - long diff = endDate.getTime() - nowDate.getTime(); - // 计算差多少天 - long day = diff / nd; - // 计算差多少小时 - long hour = diff % nd / nh; - // 计算差多少分钟 - long min = diff % nd % nh / nm; - // 计算差多少秒//输出结果 - // long sec = diff % nd % nh % nm / ns; - return day + "天" + hour + "小时" + min + "分钟"; - } -} diff --git a/ruoyi-oss/src/main/java/com/ruoyi/system/controller/SysOssController.java b/ruoyi-oss/src/main/java/com/ruoyi/system/controller/SysOssController.java index 28cea034..a629626b 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/system/controller/SysOssController.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/system/controller/SysOssController.java @@ -1,58 +1,74 @@ package com.ruoyi.system.controller; -import com.aliyun.oss.ServiceException; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.annotation.RepeatSubmit; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.exception.CustomException; -import com.ruoyi.common.utils.PageUtils; -import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.system.domain.SysOss; import com.ruoyi.system.service.ISysOssService; -import lombok.extern.slf4j.Slf4j; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -import org.springframework.ui.ModelMap; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; -import java.util.List; +import javax.validation.constraints.NotEmpty; +import java.util.Arrays; +import java.util.HashMap; import java.util.Map; /** * 文件上传 控制层 * - * @author chkj - * @date 2019-07-15 + * @author Lion Li */ -@Slf4j +@RequiredArgsConstructor(onConstructor_ = @Autowired) @RestController @RequestMapping("/system/oss") public class SysOssController extends BaseController { - @Autowired - private ISysOssService iSysOssService; + private final ISysOssService iSysOssService; /** * 查询文件上传列表 */ + @PreAuthorize("@ss.hasPermi('system:oss:list')") @GetMapping("/list") - public TableDataInfo list(SysOss sysOss) { - List list = iSysOssService.list(sysOss); - return PageUtils.buildDataInfo(list); + public TableDataInfo list(SysOss sysOss) { + return iSysOssService.queryPageList(sysOss); } /** * 上传图片 */ + @PreAuthorize("@ss.hasPermi('system:oss:upload')") + @Log(title = "OSS云存储", businessType = BusinessType.INSERT) + @RepeatSubmit @PostMapping("/upload") - public AjaxResult upload(@RequestParam("file") MultipartFile file) { + public AjaxResult> upload(@RequestParam("file") MultipartFile file) { if (file.isEmpty()) { throw new CustomException("上传文件不能为空"); } - Map json = iSysOssService.upload(file); - return AjaxResult.success(json); + SysOss oss = iSysOssService.upload(file); + Map map = new HashMap<>(2); + map.put("url", oss.getUrl()); + map.put("fileName", oss.getFileName()); + return AjaxResult.success(map); + } + + /** + * 删除OSS云存储 + */ + @PreAuthorize("@ss.hasPermi('system:oss:remove')") + @Log(title = "OSS云存储" , businessType = BusinessType.DELETE) + @DeleteMapping("/{ossIds}") + public AjaxResult remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ossIds) { + return toAjax(iSysOssService.deleteByIds(Arrays.asList(ossIds)) ? 1 : 0); } } diff --git a/ruoyi-oss/src/main/java/com/ruoyi/system/domain/SysOss.java b/ruoyi-oss/src/main/java/com/ruoyi/system/domain/SysOss.java index 406cc84c..a99d9736 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/system/domain/SysOss.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/system/domain/SysOss.java @@ -9,20 +9,24 @@ import java.io.Serializable; import java.util.Date; /** - * 文件上传表 sys_oss + * OSS云存储对象 * - * @author chkj - * @date 2019-07-15 + * @author Lion Li */ @Data -@Accessors(chain = true) @NoArgsConstructor +@Accessors(chain = true) @TableName("sys_oss") public class SysOss implements Serializable { + private static final long serialVersionUID = 1L; - @TableId(value = "id", type = IdType.AUTO) - private Long id; + + /** + * 云存储主键 + */ + @TableId(value = "oss_id") + private Long ossId; /** * 文件名 @@ -51,8 +55,21 @@ public class SysOss implements Serializable { @TableField(fill = FieldFill.INSERT) private String createBy; + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 更新人 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + /** * 服务商 */ - private Integer service; + private String service; + } diff --git a/ruoyi-oss/src/main/java/com/ruoyi/system/factory/OSSFactory.java b/ruoyi-oss/src/main/java/com/ruoyi/system/factory/OSSFactory.java deleted file mode 100644 index ed282942..00000000 --- a/ruoyi-oss/src/main/java/com/ruoyi/system/factory/OSSFactory.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.ruoyi.system.factory; - -import com.ruoyi.oss.service.abstractd.AbstractCloudStorageService; - -/** - * 文件上传Factory - */ -public class OSSFactory { - -// private static ISysConfigService sysConfigService; - - static { -// OSSFactory.sysConfigService = SpringUtils.getBean(ISysConfigService.class); - } - - public static AbstractCloudStorageService build() { -// String jsonconfig = sysConfigService.selectConfigByKey(CloudConstant.CLOUD_STORAGE_CONFIG_KEY); -// // 获取云存储配置信息 -// CloudStorageConfig config = JSON.parseObject(jsonconfig, CloudStorageConfig.class); -// if (config.getType() == CloudConstant.CloudService.QINIU.getValue()) { -// return new QiniuCloudStorageServiceImpl(config); -// } else if (config.getType() == CloudConstant.CloudService.ALIYUN.getValue()) { -// return new AliyunCloudStorageServiceImpl(config); -// } else if (config.getType() == CloudConstant.CloudService.QCLOUD.getValue()) { -// return new QcloudCloudStorageServiceImpl(config); -// } else if (config.getType() == CloudConstant.CloudService.MINIO.getValue()) { -// return new MinioCloudStorageServiceImpl(config); -// } - return null; - } -} diff --git a/ruoyi-oss/src/main/java/com/ruoyi/system/mapper/SysOssMapper.java b/ruoyi-oss/src/main/java/com/ruoyi/system/mapper/SysOssMapper.java index b1f1303f..2e28a09c 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/system/mapper/SysOssMapper.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/system/mapper/SysOssMapper.java @@ -6,8 +6,7 @@ import com.ruoyi.system.domain.SysOss; /** * 文件上传 数据层 * - * @author chkj - * @date 2019-07-15 + * @author Lion Li */ public interface SysOssMapper extends BaseMapper { } diff --git a/ruoyi-oss/src/main/java/com/ruoyi/system/service/ISysOssService.java b/ruoyi-oss/src/main/java/com/ruoyi/system/service/ISysOssService.java index 4a71b2df..8ebf5662 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/system/service/ISysOssService.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/system/service/ISysOssService.java @@ -1,24 +1,22 @@ package com.ruoyi.system.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.system.domain.SysOss; import org.springframework.web.multipart.MultipartFile; -import java.util.List; -import java.util.Map; +import java.util.Collection; /** * 文件上传 服务层 * - * @author chkj - * @date 2019-07-15 + * @author Lion Li */ public interface ISysOssService extends IService { - /** - * 列表查询 - */ - List list(SysOss sysOss); - Map upload(MultipartFile file); + TableDataInfo queryPageList(SysOss sysOss); + SysOss upload(MultipartFile file); + + Boolean deleteByIds(Collection ids); } diff --git a/ruoyi-oss/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java b/ruoyi-oss/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java index 729470a1..1f9c7643 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java @@ -1,63 +1,71 @@ package com.ruoyi.system.service.impl; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.exception.CustomException; -import com.ruoyi.oss.config.CloudStorageConfig; -import com.ruoyi.oss.service.abstractd.AbstractCloudStorageService; +import com.ruoyi.common.utils.PageUtils; +import com.ruoyi.oss.factory.OssFactory; +import com.ruoyi.oss.service.ICloudStorageService; import com.ruoyi.system.domain.SysOss; -import com.ruoyi.system.factory.OSSFactory; import com.ruoyi.system.mapper.SysOssMapper; import com.ruoyi.system.service.ISysOssService; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; -import java.util.HashMap; +import java.util.Collection; import java.util.List; -import java.util.Map; /** * 文件上传 服务层实现 * - * @author chkj - * @date 2019-07-15 + * @author Lion Li */ @Slf4j @Service public class SysOssServiceImpl extends ServiceImpl implements ISysOssService { - @Autowired - private CloudStorageConfig config; - @Override - public List list(SysOss sysOss) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - return baseMapper.selectList(wrapper); + public TableDataInfo queryPageList(SysOss sysOss) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.like(StrUtil.isNotBlank(sysOss.getFileName()), SysOss::getFileName, sysOss.getFileName()); + lqw.like(StrUtil.isNotBlank(sysOss.getFileSuffix()), SysOss::getFileSuffix, sysOss.getFileSuffix()); + lqw.like(StrUtil.isNotBlank(sysOss.getUrl()), SysOss::getUrl, sysOss.getUrl()); + lqw.like(StrUtil.isNotBlank(sysOss.getService()), SysOss::getService, sysOss.getService()); + return PageUtils.buildDataInfo(page(PageUtils.buildPage(), lqw)); } @Override - public Map upload(MultipartFile file) { + public SysOss upload(MultipartFile file) { String originalfileName = file.getOriginalFilename(); - String suffix = originalfileName.substring(originalfileName.lastIndexOf(".")); + String suffix = StrUtil.sub(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length()); try { - AbstractCloudStorageService storage = OSSFactory.build(); + ICloudStorageService storage = OssFactory.instance(); String url = storage.uploadSuffix(file.getBytes(), suffix); // 保存文件信息 - SysOss ossEntity = new SysOss() + SysOss oss = new SysOss() .setUrl(url).setFileSuffix(suffix) .setFileName(originalfileName) .setService(storage.getServiceType()); - save(ossEntity); - Map map = new HashMap<>(2); - map.put("url", ossEntity.getUrl()); - map.put("fileName", ossEntity.getFileName()); - return map; + save(oss); + return oss; } catch (IOException e) { throw new CustomException("文件读取异常!!!", e); } } + @Override + public Boolean deleteByIds(Collection ids) { + List list = listByIds(ids); + for (SysOss sysOss : list) { + ICloudStorageService storage = OssFactory.instance(sysOss.getService()); + storage.delete(sysOss.getUrl()); + } + return removeByIds(ids); + } + } diff --git a/ruoyi-oss/src/main/resources/mapper/system/SysOssMapper.xml b/ruoyi-oss/src/main/resources/mapper/system/SysOssMapper.xml index 1af8bf14..a1e4ca8a 100644 --- a/ruoyi-oss/src/main/resources/mapper/system/SysOssMapper.xml +++ b/ruoyi-oss/src/main/resources/mapper/system/SysOssMapper.xml @@ -1,21 +1,18 @@ - + - - - - - - - - - + + + + + + + + + + - - - id, file_name, file_suffix, url, create_time, create_by, service - diff --git a/ruoyi-oss/src/main/resources/sql/oss.sql b/ruoyi-oss/src/main/resources/sql/oss.sql deleted file mode 100644 index b49f08e7..00000000 --- a/ruoyi-oss/src/main/resources/sql/oss.sql +++ /dev/null @@ -1,30 +0,0 @@ -CREATE TABLE `sys_oss` -( - `id` bigint(20) NOT NULL AUTO_INCREMENT, - `file_name` varchar(64) NOT NULL DEFAULT '' COMMENT '文件名', - `file_suffix` varchar(10) NOT NULL DEFAULT '' COMMENT '文件后缀名', - `url` varchar(200) NOT NULL COMMENT 'URL地址', - `create_time` datetime DEFAULT NULL COMMENT '创建时间', - `create_by` varchar(64) NOT NULL DEFAULT '' COMMENT '上传人', - `service` tinyint(2) NOT NULL DEFAULT '1' COMMENT '服务商', - PRIMARY KEY (`id`) -) ENGINE = InnoDB - AUTO_INCREMENT = 8 - DEFAULT CHARSET = utf8 COMMENT ='文件上传'; - -INSERT INTO `ry`.`sys_menu` (`menu_name`, `parent_id`, `order_num`, `url`, `menu_type`, `visible`, `perms`, `icon`, - `create_by`, `create_time`, `update_by`, `update_time`, `remark`) -VALUES ('文件管理', '1', '10', '/system/oss', 'C', '0', 'system:oss:view', '#', 'admin', '2018-11-16 13:59:45', '', NULL, - ''); -INSERT INTO `ry`.`sys_menu` (`menu_name`, `parent_id`, `order_num`, `url`, `menu_type`, `visible`, `perms`, `icon`, - `create_by`, `create_time`, `update_by`, `update_time`, `remark`) -VALUES ('文件上传', '1056', '1', '#', 'F', '0', 'system:oss:add', '#', 'admin', '2018-11-16 13:59:45', '', NULL, ''); -INSERT INTO `ry`.`sys_menu` (`menu_name`, `parent_id`, `order_num`, `url`, `menu_type`, `visible`, `perms`, `icon`, - `create_by`, `create_time`, `update_by`, `update_time`, `remark`) -VALUES ('文件删除', '1056', '2', '#', 'F', '0', 'system:oss:remove', '#', 'admin', '2018-11-16 13:59:45', '', NULL, ''); -INSERT INTO `ry`.`sys_menu` (`menu_name`, `parent_id`, `order_num`, `url`, `menu_type`, `visible`, `perms`, `icon`, - `create_by`, `create_time`, `update_by`, `update_time`, `remark`) -VALUES ('文件配置', '1056', '3', '#', 'F', '0', 'system:oss:config', '#', 'admin', '2018-11-16 13:59:45', '', NULL, ''); -INSERT INTO `ry`.`sys_menu` (`menu_name`, `parent_id`, `order_num`, `url`, `menu_type`, `visible`, `perms`, `icon`, - `create_by`, `create_time`, `update_by`, `update_time`, `remark`) -VALUES ('文件修改', '1056', '4', '#', 'F', '0', 'system:oss:remove', '#', 'admin', '2018-11-16 13:59:45', '', NULL, ''); diff --git a/sql/oss.sql b/sql/oss.sql new file mode 100644 index 00000000..ecb84169 --- /dev/null +++ b/sql/oss.sql @@ -0,0 +1,24 @@ +-- ---------------------------- +-- OSS云存储表 +-- ---------------------------- +drop table if exists sys_oss; +create table sys_oss ( + oss_id bigint(20) not null auto_increment comment '云存储主键', + file_name varchar(64) not null default '' comment '文件名', + file_suffix varchar(10) not null default '' comment '文件后缀名', + url varchar(200) not null comment 'URL地址', + create_time datetime default null comment '创建时间', + create_by varchar(64) not null default '' comment '上传人', + update_time datetime default null comment '更新时间', + update_by varchar(64) not null default '' comment '更新人', + service varchar(10) not null default 'minio' comment '服务商', + primary key (oss_id) +) engine=innodb comment ='OSS云存储表'; + +insert into sys_config values(10, 'OSS云存储服务商', 'sys.oss.cloudStorageService', 'minio', 'Y', 'admin', sysdate(), '', null, 'OSS云存储服务商(qiniu:七牛云, aliyun:阿里云, qcloud:腾讯云, minio: Minio)'); + +insert into sys_menu values('118', '文件管理', '1', '10', 'oss', 'system/oss/index', 1, 0, 'C', '0', '0', 'system:oss:list', 'oss', 'admin', sysdate(), '', null, '文件管理菜单'); + +insert into sys_menu values('1600', '文件查询', '118', '1', '#', '', 1, 0, 'F', '0', '0', 'system:oss:query', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1601', '文件上传', '118', '2', '#', '', 1, 0, 'F', '0', '0', 'system:oss:upload', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1602', '文件删除', '118', '3', '#', '', 1, 0, 'F', '0', '0', 'system:oss:remove', '#', 'admin', sysdate(), '', null, '');