Browse Source

update 使用 策略+工厂 重写OSS模块

疯狂的狮子li 3 years ago
parent
commit
089e288a6e
26 changed files with 601 additions and 473 deletions
  1. 4 0
      ruoyi-oss/pom.xml
  2. 0 69
      ruoyi-oss/src/main/java/com/ruoyi/oss/config/CloudStorageConfig.java
  3. 6 33
      ruoyi-oss/src/main/java/com/ruoyi/oss/constant/CloudConstant.java
  4. 36 0
      ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/CloudServiceEnumd.java
  5. 40 0
      ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java
  6. 40 0
      ruoyi-oss/src/main/java/com/ruoyi/oss/properties/AliyunProperties.java
  7. 25 0
      ruoyi-oss/src/main/java/com/ruoyi/oss/properties/CloudStorageProperties.java
  8. 40 0
      ruoyi-oss/src/main/java/com/ruoyi/oss/properties/MinioProperties.java
  9. 45 0
      ruoyi-oss/src/main/java/com/ruoyi/oss/properties/QcloudProperties.java
  10. 40 0
      ruoyi-oss/src/main/java/com/ruoyi/oss/properties/QiniuProperties.java
  11. 10 0
      ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageService.java
  12. 33 14
      ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageService.java
  13. 39 15
      ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunCloudStorageServiceImpl.java
  14. 32 22
      ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageServiceImpl.java
  15. 40 26
      ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudCloudStorageServiceImpl.java
  16. 39 25
      ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageServiceImpl.java
  17. 0 135
      ruoyi-oss/src/main/java/com/ruoyi/oss/utils/DateUtils.java
  18. 34 18
      ruoyi-oss/src/main/java/com/ruoyi/system/controller/SysOssController.java
  19. 24 7
      ruoyi-oss/src/main/java/com/ruoyi/system/domain/SysOss.java
  20. 0 31
      ruoyi-oss/src/main/java/com/ruoyi/system/factory/OSSFactory.java
  21. 1 2
      ruoyi-oss/src/main/java/com/ruoyi/system/mapper/SysOssMapper.java
  22. 7 9
      ruoyi-oss/src/main/java/com/ruoyi/system/service/ISysOssService.java
  23. 31 23
      ruoyi-oss/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java
  24. 11 14
      ruoyi-oss/src/main/resources/mapper/system/SysOssMapper.xml
  25. 0 30
      ruoyi-oss/src/main/resources/sql/oss.sql
  26. 24 0
      sql/oss.sql

+ 4 - 0
ruoyi-oss/pom.xml

@@ -22,6 +22,10 @@
             <groupId>com.ruoyi</groupId>
             <artifactId>ruoyi-common</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-system</artifactId>
+        </dependency>
 
         <dependency>
             <groupId>com.qiniu</groupId>

+ 0 - 69
ruoyi-oss/src/main/java/com/ruoyi/oss/config/CloudStorageConfig.java

@@ -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;
-
-}

+ 6 - 33
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";
-
-	/**
-	 * 云服务商
-	 */
-	@Getter
-	@AllArgsConstructor
-	public enum CloudService {
-
-		/**
-		 * 七牛云
-		 */
-		QINIU(1),
-
-		/**
-		 * 阿里云
-		 */
-		ALIYUN(2),
-
-		/**
-		 * 腾讯云
-		 */
-		QCLOUD(3),
+	public final static String CLOUD_STORAGE_CONFIG_KEY = "sys.oss.cloudStorageService";
 
-		/**
-		 * minio
-		 */
-		MINIO(4);
 
-		private final int value;
-	}
 }

+ 36 - 0
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;
+}

+ 40 - 0
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<String, ICloudStorageService> 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);
+	}
+}

+ 40 - 0
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;
+
+}

+ 25 - 0
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;
+
+}

+ 40 - 0
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;
+
+}

+ 45 - 0
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;
+
+}

+ 40 - 0
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;
+
+}

+ 10 - 0
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();
+
 	/**
 	 * 文件路径
 	 *

+ 33 - 14
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;
 }

+ 39 - 15
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);
 	}
 }

+ 32 - 22
ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageServiceImpl.java

@@ -1,33 +1,45 @@
 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();
-	}
-
-	private void init() {
+	@Autowired
+	public MinioCloudStorageServiceImpl(CloudStorageProperties properties) {
+		this.properties = properties.getMinio();
 		minioClient = MinioClient.builder()
-			.endpoint(config.getDomain())
-			.credentials(config.getAccessKey(), config.getSecretKey())
+			.endpoint(this.properties.getEndpoint())
+			.credentials(this.properties.getAccessKey(), this.properties.getSecretKey())
 			.build();
 	}
 
+	@Override
+	public String getServiceType() {
+		return CloudServiceEnumd.MINIO.getValue();
+	}
+
 	@Override
 	public String upload(byte[] data, String path) {
 		try {
@@ -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);
+	}
 }

+ 40 - 26
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);
+	}
 }

+ 39 - 25
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());
 			}
@@ -66,19 +81,18 @@ public class QiniuCloudStorageServiceImpl extends AbstractCloudStorageService {
 	}
 
 	@Override
-	public String upload(InputStream inputStream, String path) {
-		byte[] data = IoUtil.readBytes(inputStream);
-		return this.upload(data, path);
+	public String uploadSuffix(byte[] data, String suffix) {
+		return upload(data, getPath(this.properties.getPrefix(), suffix));
 	}
 
 	@Override
-	public String uploadSuffix(byte[] data, String suffix) {
-		return upload(data, getPath(config.getPrefix(), suffix));
+	public String uploadSuffix(InputStream inputStream, String suffix) {
+		return upload(inputStream, getPath(this.properties.getPrefix(), suffix));
 	}
 
 	@Override
-	public String uploadSuffix(InputStream inputStream, String suffix) {
-		return upload(inputStream, getPath(config.getPrefix(), suffix));
+	public void afterPropertiesSet() throws Exception {
+		OssFactory.register(getServiceType(),this);
 	}
 
 }

+ 0 - 135
ruoyi-oss/src/main/java/com/ruoyi/oss/utils/DateUtils.java

@@ -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 + "分钟";
-	}
-}

+ 34 - 18
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<SysOss> list = iSysOssService.list(sysOss);
-		return PageUtils.buildDataInfo(list);
+	public TableDataInfo<SysOss> 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<Map<String, String>> upload(@RequestParam("file") MultipartFile file) {
 		if (file.isEmpty()) {
 			throw new CustomException("上传文件不能为空");
 		}
-		Map<String, String> json = iSysOssService.upload(file);
-		return AjaxResult.success(json);
+		SysOss oss = iSysOssService.upload(file);
+		Map<String, String> 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<Void> remove(@NotEmpty(message = "主键不能为空")
+								   @PathVariable Long[] ossIds) {
+		return toAjax(iSysOssService.deleteByIds(Arrays.asList(ossIds)) ? 1 : 0);
 	}
 
 }

+ 24 - 7
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;
+
 }

+ 0 - 31
ruoyi-oss/src/main/java/com/ruoyi/system/factory/OSSFactory.java

@@ -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;
-	}
-}

+ 1 - 2
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<SysOss> {
 }

+ 7 - 9
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<SysOss> {
-	/**
-	 * 列表查询
-	 */
-	List<SysOss> list(SysOss sysOss);
 
-	Map<String, String> upload(MultipartFile file);
+	TableDataInfo<SysOss> queryPageList(SysOss sysOss);
 
+	SysOss upload(MultipartFile file);
+
+	Boolean deleteByIds(Collection<Long> ids);
 }

+ 31 - 23
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<SysOssMapper, SysOss> implements ISysOssService {
 
-	@Autowired
-	private CloudStorageConfig config;
-
 	@Override
-	public List<SysOss> list(SysOss sysOss) {
-		LambdaQueryWrapper<SysOss> wrapper = new LambdaQueryWrapper<>();
-		return baseMapper.selectList(wrapper);
+	public TableDataInfo<SysOss> queryPageList(SysOss sysOss) {
+		LambdaQueryWrapper<SysOss> 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<String, String> 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<String, String> 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<Long> ids) {
+		List<SysOss> list = listByIds(ids);
+		for (SysOss sysOss : list) {
+			ICloudStorageService storage = OssFactory.instance(sysOss.getService());
+			storage.delete(sysOss.getUrl());
+		}
+		return removeByIds(ids);
+	}
+
 }

+ 11 - 14
ruoyi-oss/src/main/resources/mapper/system/SysOssMapper.xml

@@ -1,21 +1,18 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.chkj.cloudStorage.mapper.SysOssMapper">
+<mapper namespace="com.ruoyi.system.mapper.SysOssMapper">
 
-    <!-- 通用查询映射结果 -->
-    <resultMap id="BaseResultMap" type="com.chkj.cloudStorage.domain.SysOss">
-        <id column="id" property="id"/>
-        <result column="file_name" property="fileName"/>
-        <result column="file_suffix" property="fileSuffix"/>
-        <result column="url" property="url"/>
-        <result column="create_time" property="createTime"/>
-        <result column="create_by" property="createBy"/>
-        <result column="service" property="service"/>
+    <resultMap type="com.ruoyi.system.domain.SysOss" id="SysOssResult">
+        <result property="ossId" column="oss_id"/>
+        <result property="fileName" column="file_name"/>
+        <result property="fileSuffix" column="file_suffix"/>
+        <result property="url" column="url"/>
+        <result property="createTime" column="create_time"/>
+        <result property="createBy" column="create_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="service" column="service"/>
     </resultMap>
 
-    <!-- 通用查询结果列 -->
-    <sql id="Base_Column_List">
-        id, file_name, file_suffix, url, create_time, create_by, service
-    </sql>
 
 </mapper>

+ 0 - 30
ruoyi-oss/src/main/resources/sql/oss.sql

@@ -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, '');

+ 24 - 0
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, '');