mirror of
				https://github.com/dromara/RuoYi-Vue-Plus.git
				synced 2025-11-04 08:13:44 +08:00 
			
		
		
		
	update 使用 策略+工厂 重写OSS模块
This commit is contained in:
		@@ -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>
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -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;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
}
 | 
			
		||||
@@ -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);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -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;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -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;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -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;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -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;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -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;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -2,8 +2,18 @@ package com.ruoyi.oss.service;
 | 
			
		||||
 | 
			
		||||
import java.io.InputStream;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 云存储服务接口
 | 
			
		||||
 *
 | 
			
		||||
 * @author Lion Li
 | 
			
		||||
 */
 | 
			
		||||
public interface ICloudStorageService {
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 获取服务商类型
 | 
			
		||||
	 */
 | 
			
		||||
	String getServiceType();
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 文件路径
 | 
			
		||||
	 *
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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 + "分钟";
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -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);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -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> {
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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>
 | 
			
		||||
 
 | 
			
		||||
@@ -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
									
								
								sql/oss.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								sql/oss.sql
									
									
									
									
									
										Normal file
									
								
							@@ -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, '');
 | 
			
		||||
		Reference in New Issue
	
	Block a user