From 940b996e2d663c1599fcfc7073dc52422e255561 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子Li <15040126243@163.com>
Date: 星期二, 10 五月 2022 09:40:40 +0800
Subject: [PATCH] !175 [重大改动] 基于S3协议重新实现 OSS模块 支持自定义域名 * [重大改动] 基于S3协议重新实现 OSS模块 支持自定义域名

---
 ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOssConfig.java            |    6 
 script/sql/update/sqlserver/update-4.1-4.2.sql                                  |   24 ++
 ruoyi-oss/src/main/java/com/ruoyi/oss/core/OssClient.java                       |  188 +++++++++++++++++
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java |    8 
 script/sql/ry_vue_4.X.sql                                                       |   11 
 script/sql/update/update-4.1-4.2.sql                                            |    9 
 ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java                   |   56 ++--
 ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysOssConfigVo.java       |    6 
 script/sql/update/postgres/update-4.1-4.2.sql                                   |   11 +
 pom.xml                                                                         |   12 
 /dev/null                                                                       |  127 -----------
 script/sql/postgres/postgres_ry_vue_4.X.sql                                     |   12 
 ruoyi-oss/pom.xml                                                               |   30 --
 script/sql/sqlserver/sqlserver_ry_vue_4.X.sql                                   |   17 +
 script/sql/update/oracle/update-4.1-4.2.sql                                     |   10 
 ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/PolicyType.java                     |   16 -
 script/sql/oracle/oracle_ry_vue_4.X.sql                                         |   12 
 ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysOssConfigBo.java       |   20 +
 ruoyi-oss/src/main/java/com/ruoyi/oss/constant/OssConstant.java                 |    5 
 ruoyi-ui/src/views/system/oss/config.vue                                        |   38 +--
 ruoyi-oss/src/main/java/com/ruoyi/oss/properties/OssProperties.java             |    7 
 21 files changed, 366 insertions(+), 259 deletions(-)

diff --git a/pom.xml b/pom.xml
index b5e00a9..3992517 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,11 +45,7 @@
         <guava.version>30.0-jre</guava.version>
 
         <!-- OSS 閰嶇疆 -->
-        <qiniu.version>7.9.5</qiniu.version>
-        <aliyun.oss.version>3.14.0</aliyun.oss.version>
-        <qcloud.cos.version>5.6.72</qcloud.cos.version>
-        <minio.version>8.3.8</minio.version>
-
+        <aws-java-sdk-s3.version>1.12.215</aws-java-sdk-s3.version>
         <!-- SMS 閰嶇疆 -->
         <aliyun.sms.version>2.0.9</aliyun.sms.version>
         <tencent.sms.version>3.1.500</tencent.sms.version>
@@ -197,6 +193,12 @@
             </dependency>
 
             <dependency>
+                <groupId>com.amazonaws</groupId>
+                <artifactId>aws-java-sdk-s3</artifactId>
+                <version>${aws-java-sdk-s3.version}</version>
+            </dependency>
+
+            <dependency>
                 <groupId>com.aliyun</groupId>
                 <artifactId>dysmsapi20170525</artifactId>
                 <version>${aliyun.sms.version}</version>
diff --git a/ruoyi-oss/pom.xml b/ruoyi-oss/pom.xml
index d1ed2c9..9698650 100644
--- a/ruoyi-oss/pom.xml
+++ b/ruoyi-oss/pom.xml
@@ -24,34 +24,8 @@
         </dependency>
 
         <dependency>
-            <groupId>com.qiniu</groupId>
-            <artifactId>qiniu-java-sdk</artifactId>
-            <version>${qiniu.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.aliyun.oss</groupId>
-            <artifactId>aliyun-sdk-oss</artifactId>
-            <version>${aliyun.oss.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.qcloud</groupId>
-            <artifactId>cos_api</artifactId>
-            <version>${qcloud.cos.version}</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.slf4j</groupId>
-                    <artifactId>slf4j-log4j12</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>org.bouncycastle</groupId>
-                    <artifactId>bcprov-jdk15on</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>io.minio</groupId>
-            <artifactId>minio</artifactId>
-            <version>${minio.version}</version>
+            <groupId>com.amazonaws</groupId>
+            <artifactId>aws-java-sdk-s3</artifactId>
         </dependency>
 
     </dependencies>
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/constant/OssConstant.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/constant/OssConstant.java
index 6c00cd8..1d1a777 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/constant/OssConstant.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/constant/OssConstant.java
@@ -36,6 +36,11 @@
     List<Integer> SYSTEM_DATA_IDS = Arrays.asList(1, 2, 3, 4);
 
     /**
+     * 浜戞湇鍔″晢
+     */
+    String[] CLOUD_SERVICE = new String[] {"aliyun", "qcloud", "qiniu"};
+
+    /**
      * https 鐘舵��
      */
     String IS_HTTPS = "Y";
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/core/OssClient.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/core/OssClient.java
new file mode 100644
index 0000000..6f6be8f
--- /dev/null
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/core/OssClient.java
@@ -0,0 +1,188 @@
+package com.ruoyi.oss.core;
+
+import cn.hutool.core.util.IdUtil;
+import com.amazonaws.ClientConfiguration;
+import com.amazonaws.Protocol;
+import com.amazonaws.auth.AWSCredentials;
+import com.amazonaws.auth.AWSCredentialsProvider;
+import com.amazonaws.auth.AWSStaticCredentialsProvider;
+import com.amazonaws.auth.BasicAWSCredentials;
+import com.amazonaws.client.builder.AwsClientBuilder;
+import com.amazonaws.services.s3.AmazonS3;
+import com.amazonaws.services.s3.AmazonS3Client;
+import com.amazonaws.services.s3.model.CannedAccessControlList;
+import com.amazonaws.services.s3.model.CreateBucketRequest;
+import com.amazonaws.services.s3.model.ObjectMetadata;
+import com.amazonaws.services.s3.model.PutObjectRequest;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.oss.constant.OssConstant;
+import com.ruoyi.oss.entity.UploadResult;
+import com.ruoyi.oss.enumd.PolicyType;
+import com.ruoyi.oss.exception.OssException;
+import com.ruoyi.oss.properties.OssProperties;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+
+/**
+ * S3 瀛樺偍鍗忚 鎵�鏈夊吋瀹筍3鍗忚鐨勪簯鍘傚晢鍧囨敮鎸�
+ * 闃块噷浜� 鑵捐浜� 涓冪墰浜� minio
+ *
+ * @author Lion Li
+ */
+public class OssClient {
+
+    private final String configKey;
+
+    private final OssProperties properties;
+
+    private final AmazonS3 client;
+
+    public OssClient(String configKey, OssProperties ossProperties) {
+        this.configKey = configKey;
+        this.properties = ossProperties;
+        try {
+            AwsClientBuilder.EndpointConfiguration endpointConfig =
+                new AwsClientBuilder.EndpointConfiguration(properties.getEndpoint(), properties.getRegion());
+
+            AWSCredentials credentials = new BasicAWSCredentials(properties.getAccessKey(), properties.getSecretKey());
+            AWSCredentialsProvider credentialsProvider = new AWSStaticCredentialsProvider(credentials);
+            ClientConfiguration clientConfig = new ClientConfiguration();
+            if (OssConstant.IS_HTTPS.equals(properties.getIsHttps())) {
+                clientConfig.setProtocol(Protocol.HTTPS);
+            } else {
+                clientConfig.setProtocol(Protocol.HTTP);
+            }
+            this.client = AmazonS3Client.builder()
+                .withEndpointConfiguration(endpointConfig)
+                .withClientConfiguration(clientConfig)
+                .withCredentials(credentialsProvider)
+                .disableChunkedEncoding()
+                .build();
+
+            createBucket();
+        } catch (Exception e) {
+            if (e instanceof OssException) {
+                throw e;
+            }
+            throw new OssException("閰嶇疆閿欒! 璇锋鏌ョ郴缁熼厤缃�:[" + e.getMessage() + "]");
+        }
+    }
+
+    public void createBucket() {
+        try {
+            String bucketName = properties.getBucketName();
+            if (client.doesBucketExistV2(bucketName)) {
+                return;
+            }
+            CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
+            createBucketRequest.setCannedAcl(CannedAccessControlList.PublicRead);
+            client.createBucket(createBucketRequest);
+            client.setBucketPolicy(bucketName, getPolicy(bucketName, PolicyType.READ));
+        } catch (Exception e) {
+            throw new OssException("鍒涘缓Bucket澶辫触, 璇锋牳瀵归厤缃俊鎭�:[" + e.getMessage() + "]");
+        }
+    }
+
+    public UploadResult upload(byte[] data, String path, String contentType) {
+        return upload(new ByteArrayInputStream(data), path, contentType);
+    }
+
+    public UploadResult upload(InputStream inputStream, String path, String contentType) {
+        try {
+            ObjectMetadata metadata = new ObjectMetadata();
+            metadata.setContentType(contentType);
+            metadata.setContentLength(inputStream.available());
+            client.putObject(new PutObjectRequest(properties.getBucketName(), path, inputStream, metadata));
+        } catch (Exception e) {
+            throw new OssException("涓婁紶鏂囦欢澶辫触锛岃妫�鏌ラ厤缃俊鎭�:[" + e.getMessage() + "]");
+        }
+        return UploadResult.builder().url(getUrl() + "/" + path).filename(path).build();
+    }
+
+    public void delete(String path) {
+        path = path.replace(getUrl() + "/", "");
+        try {
+            client.deleteObject(properties.getBucketName(), path);
+        } catch (Exception e) {
+            throw new OssException("涓婁紶鏂囦欢澶辫触锛岃妫�鏌ラ厤缃俊鎭�:[" + e.getMessage() + "]");
+        }
+    }
+
+    public UploadResult uploadSuffix(byte[] data, String suffix, String contentType) {
+        return upload(data, getPath(properties.getPrefix(), suffix), contentType);
+    }
+
+    public UploadResult uploadSuffix(InputStream inputStream, String suffix, String contentType) {
+        return upload(inputStream, getPath(properties.getPrefix(), suffix), contentType);
+    }
+
+    public String getUrl() {
+        String domain = properties.getDomain();
+        if (StringUtils.isNotBlank(domain)) {
+            return domain;
+        }
+        String endpoint = properties.getEndpoint();
+        String header = OssConstant.IS_HTTPS.equals(properties.getIsHttps()) ? "https://" : "http://";
+        // 浜戞湇鍔″晢鐩存帴杩斿洖
+        if (StringUtils.containsAny(endpoint, OssConstant.CLOUD_SERVICE)){
+            return header + properties.getBucketName() + "." + endpoint;
+        }
+        // minio 鍗曠嫭澶勭悊
+        return header + endpoint + "/" + properties.getBucketName();
+    }
+
+    public String getPath(String prefix, String suffix) {
+        // 鐢熸垚uuid
+        String uuid = IdUtil.fastSimpleUUID();
+        // 鏂囦欢璺緞
+        String path = DateUtils.datePath() + "/" + uuid;
+        if (StringUtils.isNotBlank(prefix)) {
+            path = prefix + "/" + path;
+        }
+        return path + suffix;
+    }
+
+
+    public String getConfigKey() {
+        return configKey;
+    }
+
+    private static String getPolicy(String bucketName, PolicyType policyType) {
+        StringBuilder builder = new StringBuilder();
+        builder.append("{\n\"Statement\": [\n{\n\"Action\": [\n");
+        if (policyType == PolicyType.WRITE) {
+            builder.append("\"s3:GetBucketLocation\",\n\"s3:ListBucketMultipartUploads\"\n");
+        } else if (policyType == PolicyType.READ_WRITE) {
+            builder.append("\"s3:GetBucketLocation\",\n\"s3:ListBucket\",\n\"s3:ListBucketMultipartUploads\"\n");
+        } else {
+            builder.append("\"s3:GetBucketLocation\"\n");
+        }
+        builder.append("],\n\"Effect\": \"Allow\",\n\"Principal\": \"*\",\n\"Resource\": \"arn:aws:s3:::");
+        builder.append(bucketName);
+        builder.append("\"\n},\n");
+        if (policyType == PolicyType.READ) {
+            builder.append("{\n\"Action\": [\n\"s3:ListBucket\"\n],\n\"Effect\": \"Deny\",\n\"Principal\": \"*\",\n\"Resource\": \"arn:aws:s3:::");
+            builder.append(bucketName);
+            builder.append("\"\n},\n");
+        }
+        builder.append("{\n\"Action\": ");
+        switch (policyType) {
+            case WRITE:
+                builder.append("[\n\"s3:AbortMultipartUpload\",\n\"s3:DeleteObject\",\n\"s3:ListMultipartUploadParts\",\n\"s3:PutObject\"\n],\n");
+                break;
+            case READ_WRITE:
+                builder.append("[\n\"s3:AbortMultipartUpload\",\n\"s3:DeleteObject\",\n\"s3:GetObject\",\n\"s3:ListMultipartUploadParts\",\n\"s3:PutObject\"\n],\n");
+                break;
+            default:
+                builder.append("\"s3:GetObject\",\n");
+                break;
+        }
+        builder.append("\"Effect\": \"Allow\",\n\"Principal\": \"*\",\n\"Resource\": \"arn:aws:s3:::");
+        builder.append(bucketName);
+        builder.append("/*\"\n}\n],\n\"Version\": \"2012-10-17\"\n}\n");
+        return builder.toString();
+    }
+
+}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/OssEnumd.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/OssEnumd.java
deleted file mode 100644
index e16a673..0000000
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/OssEnumd.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.ruoyi.oss.enumd;
-
-import com.ruoyi.oss.service.impl.AliyunOssStrategy;
-import com.ruoyi.oss.service.impl.MinioOssStrategy;
-import com.ruoyi.oss.service.impl.QcloudOssStrategy;
-import com.ruoyi.oss.service.impl.QiniuOssStrategy;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * 瀵硅薄瀛樺偍鏈嶅姟鍟嗘灇涓�
- *
- * @author Lion Li
- */
-@Getter
-@AllArgsConstructor
-public enum OssEnumd {
-
-    /**
-     * 涓冪墰浜�
-     */
-    QINIU("qiniu", QiniuOssStrategy.class),
-
-    /**
-     * 闃块噷浜�
-     */
-    ALIYUN("aliyun", AliyunOssStrategy.class),
-
-    /**
-     * 鑵捐浜�
-     */
-    QCLOUD("qcloud", QcloudOssStrategy.class),
-
-    /**
-     * minio
-     */
-    MINIO("minio", MinioOssStrategy.class);
-
-    private final String value;
-
-    private final Class<?> beanClass;
-
-    public static OssEnumd find(String value) {
-        for (OssEnumd enumd : values()) {
-            if (enumd.getValue().equals(value)) {
-                return enumd;
-            }
-        }
-        return null;
-    }
-
-}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/PolicyType.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/PolicyType.java
index e1925dc..606f0f4 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/PolicyType.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/PolicyType.java
@@ -1,19 +1,3 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
 package com.ruoyi.oss.enumd;
 
 import lombok.AllArgsConstructor;
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java
index 9ac887e..7065c4a 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java
@@ -3,14 +3,14 @@
 import com.ruoyi.common.utils.JsonUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.redis.RedisUtils;
-import com.ruoyi.common.utils.spring.SpringUtils;
 import com.ruoyi.oss.constant.OssConstant;
-import com.ruoyi.oss.enumd.OssEnumd;
+import com.ruoyi.oss.core.OssClient;
 import com.ruoyi.oss.exception.OssException;
 import com.ruoyi.oss.properties.OssProperties;
-import com.ruoyi.oss.service.IOssStrategy;
-import com.ruoyi.oss.service.abstractd.AbstractOssStrategy;
 import lombok.extern.slf4j.Slf4j;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * 鏂囦欢涓婁紶Factory
@@ -20,17 +20,19 @@
 @Slf4j
 public class OssFactory {
 
+    private static final Map<String, OssClient> CLIENT_CACHE = new ConcurrentHashMap<>();
+
     /**
      * 鍒濆鍖栧伐鍘�
      */
     public static void init() {
         log.info("鍒濆鍖朞SS宸ュ巶");
-        RedisUtils.subscribe(OssConstant.CACHE_CONFIG_KEY, String.class, type -> {
-            AbstractOssStrategy strategy = getStrategy(type);
+        RedisUtils.subscribe(OssConstant.CACHE_CONFIG_KEY, String.class, configKey -> {
+            OssClient client = getClient(configKey);
             // 鏈垵濮嬪寲涓嶅鐞�
-            if (strategy.isInit) {
-                refresh(type);
-                log.info("璁㈤槄鍒锋柊OSS閰嶇疆 => " + type);
+            if (client != null) {
+                refresh(configKey);
+                log.info("璁㈤槄鍒锋柊OSS閰嶇疆 => " + configKey);
             }
         });
     }
@@ -38,42 +40,38 @@
     /**
      * 鑾峰彇榛樿瀹炰緥
      */
-    public static IOssStrategy instance() {
+    public static OssClient instance() {
         // 鑾峰彇redis 榛樿绫诲瀷
-        String type = RedisUtils.getCacheObject(OssConstant.CACHE_CONFIG_KEY);
-        if (StringUtils.isEmpty(type)) {
+        String configKey = RedisUtils.getCacheObject(OssConstant.CACHE_CONFIG_KEY);
+        if (StringUtils.isEmpty(configKey)) {
             throw new OssException("鏂囦欢瀛樺偍鏈嶅姟绫诲瀷鏃犳硶鎵惧埌!");
         }
-        return instance(type);
+        return instance(configKey);
     }
 
     /**
      * 鏍规嵁绫诲瀷鑾峰彇瀹炰緥
      */
-    public static IOssStrategy instance(String type) {
-        OssEnumd enumd = OssEnumd.find(type);
-        if (enumd == null) {
-            throw new OssException("鏂囦欢瀛樺偍鏈嶅姟绫诲瀷鏃犳硶鎵惧埌!");
+    public static OssClient instance(String configKey) {
+        OssClient client = getClient(configKey);
+        if (client == null) {
+            refresh(configKey);
+            return getClient(configKey);
         }
-        AbstractOssStrategy strategy = getStrategy(type);
-        if (!strategy.isInit) {
-            refresh(type);
-        }
-        return strategy;
+        return client;
     }
 
-    private static void refresh(String type) {
-        Object json = RedisUtils.getCacheObject(OssConstant.SYS_OSS_KEY + type);
+    private static void refresh(String configKey) {
+        Object json = RedisUtils.getCacheObject(OssConstant.SYS_OSS_KEY + configKey);
         OssProperties properties = JsonUtils.parseObject(json.toString(), OssProperties.class);
         if (properties == null) {
-            throw new OssException("绯荤粺寮傚父, '" + type + "'閰嶇疆淇℃伅涓嶅瓨鍦�!");
+            throw new OssException("绯荤粺寮傚父, '" + configKey + "'閰嶇疆淇℃伅涓嶅瓨鍦�!");
         }
-        getStrategy(type).init(properties);
+        CLIENT_CACHE.put(configKey, new OssClient(configKey, properties));
     }
 
-    private static AbstractOssStrategy getStrategy(String type) {
-        OssEnumd enumd = OssEnumd.find(type);
-        return (AbstractOssStrategy) SpringUtils.getBean(enumd.getBeanClass());
+    private static OssClient getClient(String configKey) {
+        return CLIENT_CACHE.get(configKey);
     }
 
 }
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/OssProperties.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/OssProperties.java
index d09bfdb..a017779 100644
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/OssProperties.java
+++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/OssProperties.java
@@ -11,11 +11,16 @@
 public class OssProperties {
 
     /**
-     * 鍩熷悕
+     * 璁块棶绔欑偣
      */
     private String endpoint;
 
     /**
+     * 鑷畾涔夊煙鍚�
+     */
+    private String domain;
+
+    /**
      * 鍓嶇紑
      */
     private String prefix;
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/IOssStrategy.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/IOssStrategy.java
deleted file mode 100644
index 981c23e..0000000
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/IOssStrategy.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package com.ruoyi.oss.service;
-
-import com.ruoyi.oss.entity.UploadResult;
-import com.ruoyi.oss.enumd.OssEnumd;
-
-import java.io.InputStream;
-
-/**
- * 瀵硅薄瀛樺偍绛栫暐
- *
- * @author Lion Li
- */
-public interface IOssStrategy {
-
-    /**
-     * 鍒涘缓瀛樺偍妗�
-     */
-    void createBucket();
-
-    /**
-     * 鑾峰彇鏈嶅姟鍟嗙被鍨�
-     * @return 瀵硅薄瀛樺偍鏈嶅姟鍟嗘灇涓�
-     */
-    OssEnumd getServiceType();
-
-    /**
-     * 鏂囦欢涓婁紶
-     *
-     * @param data 鏂囦欢瀛楄妭鏁扮粍
-     * @param path 鏂囦欢璺緞锛屽寘鍚枃浠跺悕
-     * @param contentType 鏂囦欢绫诲瀷
-     * @return 杩斿洖http鍦板潃
-     */
-    UploadResult upload(byte[] data, String path, String contentType);
-
-    /**
-     * 鏂囦欢鍒犻櫎
-     *
-     * @param path 鏂囦欢璺緞锛屽寘鍚枃浠跺悕
-     */
-    void delete(String path);
-
-    /**
-     * 鏂囦欢涓婁紶
-     *
-     * @param data   鏂囦欢瀛楄妭鏁扮粍
-     * @param suffix 鍚庣紑
-     * @param contentType 鏂囦欢绫诲瀷
-     * @return 杩斿洖http鍦板潃
-     */
-    UploadResult uploadSuffix(byte[] data, String suffix, String contentType);
-
-    /**
-     * 鏂囦欢涓婁紶
-     *
-     * @param inputStream 瀛楄妭娴�
-     * @param path        鏂囦欢璺緞锛屽寘鍚枃浠跺悕
-     * @param contentType 鏂囦欢绫诲瀷
-     * @return 杩斿洖http鍦板潃
-     */
-    UploadResult upload(InputStream inputStream, String path, String contentType);
-
-    /**
-     * 鏂囦欢涓婁紶
-     *
-     * @param inputStream 瀛楄妭娴�
-     * @param suffix      鍚庣紑
-     * @param contentType 鏂囦欢绫诲瀷
-     * @return 杩斿洖http鍦板潃
-     */
-    UploadResult uploadSuffix(InputStream inputStream, String suffix, String contentType);
-
-}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractOssStrategy.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractOssStrategy.java
deleted file mode 100644
index ae17c19..0000000
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractOssStrategy.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package com.ruoyi.oss.service.abstractd;
-
-import cn.hutool.core.io.IoUtil;
-import cn.hutool.core.util.IdUtil;
-import com.ruoyi.common.utils.DateUtils;
-import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.oss.entity.UploadResult;
-import com.ruoyi.oss.enumd.OssEnumd;
-import com.ruoyi.oss.properties.OssProperties;
-import com.ruoyi.oss.service.IOssStrategy;
-
-import java.io.InputStream;
-
-/**
- * 瀵硅薄瀛樺偍绛栫暐(鏀寔涓冪墰銆侀樋閲屼簯銆佽吘璁簯銆乵inio)
- *
- * @author Lion Li
- */
-public abstract class AbstractOssStrategy implements IOssStrategy {
-
-    protected OssProperties properties;
-    public boolean isInit = false;
-
-    public void init(OssProperties properties) {
-        this.properties = properties;
-    }
-
-    @Override
-    public abstract void createBucket();
-
-    @Override
-    public abstract OssEnumd getServiceType();
-
-    public String getPath(String prefix, String suffix) {
-        // 鐢熸垚uuid
-        String uuid = IdUtil.fastSimpleUUID();
-        // 鏂囦欢璺緞
-        String path = DateUtils.datePath() + "/" + uuid;
-        if (StringUtils.isNotBlank(prefix)) {
-            path = prefix + "/" + path;
-        }
-        return path + suffix;
-    }
-
-    @Override
-    public abstract UploadResult upload(byte[] data, String path, String contentType);
-
-    @Override
-    public abstract void delete(String path);
-
-    @Override
-    public UploadResult upload(InputStream inputStream, String path, String contentType) {
-        byte[] data = IoUtil.readBytes(inputStream);
-        return this.upload(data, path, contentType);
-    }
-
-    @Override
-    public abstract UploadResult uploadSuffix(byte[] data, String suffix, String contentType);
-
-    @Override
-    public abstract UploadResult uploadSuffix(InputStream inputStream, String suffix, String contentType);
-
-    /**
-     * 鑾峰彇鍩熷悕璁块棶閾炬帴
-     *
-     * @return 鍩熷悕璁块棶閾炬帴
-     */
-    public abstract String getEndpointLink();
-}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunOssStrategy.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunOssStrategy.java
deleted file mode 100644
index 62c2922..0000000
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunOssStrategy.java
+++ /dev/null
@@ -1,120 +0,0 @@
-package com.ruoyi.oss.service.impl;
-
-import com.aliyun.oss.ClientConfiguration;
-import com.aliyun.oss.OSSClient;
-import com.aliyun.oss.common.auth.DefaultCredentialProvider;
-import com.aliyun.oss.common.comm.Protocol;
-import com.aliyun.oss.model.CannedAccessControlList;
-import com.aliyun.oss.model.CreateBucketRequest;
-import com.aliyun.oss.model.ObjectMetadata;
-import com.aliyun.oss.model.PutObjectRequest;
-import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.oss.constant.OssConstant;
-import com.ruoyi.oss.entity.UploadResult;
-import com.ruoyi.oss.enumd.OssEnumd;
-import com.ruoyi.oss.exception.OssException;
-import com.ruoyi.oss.properties.OssProperties;
-import com.ruoyi.oss.service.abstractd.AbstractOssStrategy;
-import org.springframework.stereotype.Component;
-
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-
-/**
- * 闃块噷浜戝瓨鍌ㄧ瓥鐣�
- *
- * @author Lion Li
- */
-@Component
-public class AliyunOssStrategy extends AbstractOssStrategy {
-
-    private OSSClient client;
-
-    @Override
-    public void init(OssProperties ossProperties) {
-        super.init(ossProperties);
-        try {
-            ClientConfiguration configuration = new ClientConfiguration();
-            if (OssConstant.IS_HTTPS.equals(ossProperties.getIsHttps())) {
-                configuration.setProtocol(Protocol.HTTPS);
-            }
-            DefaultCredentialProvider credentialProvider = new DefaultCredentialProvider(
-                properties.getAccessKey(), properties.getSecretKey());
-            client = new OSSClient(properties.getEndpoint(), credentialProvider, configuration);
-            createBucket();
-        } catch (Exception e) {
-            throw new OssException("闃块噷浜戝瓨鍌ㄩ厤缃敊璇�! 璇锋鏌ョ郴缁熼厤缃�:[" + e.getMessage() + "]");
-        }
-        isInit = true;
-    }
-
-    @Override
-    public void createBucket() {
-        try {
-            String bucketName = properties.getBucketName();
-            if (client.doesBucketExist(bucketName)) {
-                return;
-            }
-            CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
-            createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
-            client.createBucket(createBucketRequest);
-        } catch (Exception e) {
-            throw new OssException("鍒涘缓Bucket澶辫触, 璇锋牳瀵归樋閲屼簯閰嶇疆淇℃伅:[" + e.getMessage() + "]");
-        }
-    }
-
-    @Override
-    public OssEnumd getServiceType() {
-        return OssEnumd.ALIYUN;
-    }
-
-    @Override
-    public UploadResult upload(byte[] data, String path, String contentType) {
-        return upload(new ByteArrayInputStream(data), path, contentType);
-    }
-
-    @Override
-    public UploadResult upload(InputStream inputStream, String path, String contentType) {
-        try {
-            ObjectMetadata metadata = new ObjectMetadata();
-            metadata.setContentType(contentType);
-            client.putObject(new PutObjectRequest(properties.getBucketName(), path, inputStream, metadata));
-        } catch (Exception e) {
-            throw new OssException("涓婁紶鏂囦欢澶辫触锛岃妫�鏌ラ樋閲屼簯閰嶇疆淇℃伅:[" + e.getMessage() + "]");
-        }
-        return UploadResult.builder().url(getEndpointLink() + "/" + path).filename(path).build();    }
-
-    @Override
-    public void delete(String path) {
-        path = path.replace(getEndpointLink() + "/", "");
-        try {
-            client.deleteObject(properties.getBucketName(), path);
-        } catch (Exception e) {
-            throw new OssException("涓婁紶鏂囦欢澶辫触锛岃妫�鏌ラ樋閲屼簯閰嶇疆淇℃伅:[" + e.getMessage() + "]");
-        }
-    }
-
-    @Override
-    public UploadResult uploadSuffix(byte[] data, String suffix, String contentType) {
-        return upload(data, getPath(properties.getPrefix(), suffix), contentType);
-    }
-
-    @Override
-    public UploadResult uploadSuffix(InputStream inputStream, String suffix, String contentType) {
-        return upload(inputStream, getPath(properties.getPrefix(), suffix), contentType);
-    }
-
-    @Override
-    public String getEndpointLink() {
-        String endpoint = properties.getEndpoint();
-        StringBuilder sb = new StringBuilder(endpoint);
-        if (StringUtils.containsAnyIgnoreCase(endpoint, "http://")) {
-            sb.insert(7, properties.getBucketName() + ".");
-        } else if (StringUtils.containsAnyIgnoreCase(endpoint, "https://")) {
-            sb.insert(8, properties.getBucketName() + ".");
-        } else {
-            throw new OssException("Endpoint閰嶇疆閿欒");
-        }
-        return sb.toString();
-    }
-}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioOssStrategy.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioOssStrategy.java
deleted file mode 100644
index f5be957..0000000
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioOssStrategy.java
+++ /dev/null
@@ -1,194 +0,0 @@
-package com.ruoyi.oss.service.impl;
-
-import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.oss.constant.OssConstant;
-import com.ruoyi.oss.entity.UploadResult;
-import com.ruoyi.oss.enumd.OssEnumd;
-import com.ruoyi.oss.enumd.PolicyType;
-import com.ruoyi.oss.exception.OssException;
-import com.ruoyi.oss.properties.OssProperties;
-import com.ruoyi.oss.service.abstractd.AbstractOssStrategy;
-import io.minio.*;
-import io.minio.http.HttpUtils;
-import okhttp3.HttpUrl;
-import org.springframework.http.MediaType;
-import org.springframework.stereotype.Component;
-
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-
-/**
- * minio瀛樺偍绛栫暐
- *
- * @author Lion Li
- */
-@Component
-public class MinioOssStrategy extends AbstractOssStrategy {
-
-    private MinioClient minioClient;
-
-    @Override
-    public void init(OssProperties ossProperties) {
-        super.init(ossProperties);
-        try {
-            MinioClient.Builder builder = MinioClient.builder();
-            if (OssConstant.IS_HTTPS.equals(ossProperties.getIsHttps())) {
-                HttpUrl url = HttpUtils.getBaseUrl(properties.getEndpoint())
-                    .newBuilder().scheme("https").build();
-                builder.endpoint(url);
-            } else {
-                builder.endpoint(properties.getEndpoint());
-            }
-            minioClient = builder.credentials(properties.getAccessKey(), properties.getSecretKey()).build();
-            createBucket();
-        } catch (Exception e) {
-            throw new OssException("Minio瀛樺偍閰嶇疆閿欒! 璇锋鏌ョ郴缁熼厤缃�:[" + e.getMessage() + "]");
-        }
-        isInit = true;
-    }
-
-    @Override
-    public void createBucket() {
-        try {
-            String bucketName = properties.getBucketName();
-            boolean exists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
-            if (exists) {
-                return;
-            }
-            // 涓嶅瓨鍦ㄥ氨鍒涘缓妗�
-            minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
-            minioClient.setBucketPolicy(SetBucketPolicyArgs.builder()
-                .bucket(bucketName)
-                .config(getPolicy(bucketName, PolicyType.READ))
-                .build());
-        } catch (Exception e) {
-            throw new OssException("鍒涘缓Bucket澶辫触, 璇锋牳瀵筂inio閰嶇疆淇℃伅:[" + e.getMessage() + "]");
-        }
-    }
-
-    @Override
-    public OssEnumd getServiceType() {
-        return OssEnumd.MINIO;
-    }
-
-    @Override
-    public UploadResult upload(byte[] data, String path, String contentType) {
-        return upload(new ByteArrayInputStream(data), path, contentType);
-    }
-
-    @Override
-    public UploadResult upload(InputStream inputStream, String path, String contentType) {
-        try {
-            // 瑙e喅 inputStream.available() 鍐� socket 涓嬩紶杈撳欢杩熼棶棰� 瀵艰嚧鑾峰彇鏁板�间笉绮剧‘
-            Thread.sleep(1000);
-            minioClient.putObject(PutObjectArgs.builder()
-                .bucket(properties.getBucketName())
-                .object(path)
-                .contentType(StringUtils.blankToDefault(contentType, MediaType.APPLICATION_OCTET_STREAM_VALUE))
-                .stream(inputStream, inputStream.available(), -1)
-                .build());
-        } catch (Exception e) {
-            throw new OssException("涓婁紶鏂囦欢澶辫触锛岃鏍稿Minio閰嶇疆淇℃伅:[" + e.getMessage() + "]");
-        }
-        return UploadResult.builder().url(getEndpointLink() + "/" + path).filename(path).build();
-    }
-
-    @Override
-    public void delete(String path) {
-        path = path.replace(getEndpointLink() + "/", "");
-        try {
-            minioClient.removeObject(RemoveObjectArgs.builder()
-                .bucket(properties.getBucketName())
-                .object(path)
-                .build());
-        } catch (Exception e) {
-            throw new OssException(e.getMessage());
-        }
-    }
-
-    @Override
-    public UploadResult uploadSuffix(byte[] data, String suffix, String contentType) {
-        return upload(data, getPath(properties.getPrefix(), suffix), contentType);
-    }
-
-    @Override
-    public UploadResult uploadSuffix(InputStream inputStream, String suffix, String contentType) {
-        return upload(inputStream, getPath(properties.getPrefix(), suffix), contentType);
-    }
-
-    @Override
-    public String getEndpointLink() {
-        return properties.getEndpoint() + "/" + properties.getBucketName();
-    }
-
-    private String getPolicy(String bucketName, PolicyType policyType) {
-        StringBuilder builder = new StringBuilder();
-        builder.append("{\n");
-        builder.append("    \"Statement\": [\n");
-        builder.append("        {\n");
-        builder.append("            \"Action\": [\n");
-        if (policyType == PolicyType.WRITE) {
-            builder.append("                \"s3:GetBucketLocation\",\n");
-            builder.append("                \"s3:ListBucketMultipartUploads\"\n");
-        } else if (policyType == PolicyType.READ_WRITE) {
-            builder.append("                \"s3:GetBucketLocation\",\n");
-            builder.append("                \"s3:ListBucket\",\n");
-            builder.append("                \"s3:ListBucketMultipartUploads\"\n");
-        } else {
-            builder.append("                \"s3:GetBucketLocation\"\n");
-        }
-        builder.append("            ],\n");
-        builder.append("            \"Effect\": \"Allow\",\n");
-        builder.append("            \"Principal\": \"*\",\n");
-        builder.append("            \"Resource\": \"arn:aws:s3:::");
-        builder.append(bucketName);
-        builder.append("\"\n");
-        builder.append("        },\n");
-        if (PolicyType.READ.equals(policyType)) {
-            builder.append("        {\n");
-            builder.append("            \"Action\": [\n");
-            builder.append("                \"s3:ListBucket\"\n");
-            builder.append("            ],\n");
-            builder.append("            \"Effect\": \"Deny\",\n");
-            builder.append("            \"Principal\": \"*\",\n");
-            builder.append("            \"Resource\": \"arn:aws:s3:::");
-            builder.append(bucketName);
-            builder.append("\"\n");
-            builder.append("        },\n");
-        }
-        builder.append("        {\n");
-        builder.append("            \"Action\": ");
-        switch (policyType) {
-            case WRITE:
-                builder.append("[\n");
-                builder.append("                \"s3:AbortMultipartUpload\",\n");
-                builder.append("                \"s3:DeleteObject\",\n");
-                builder.append("                \"s3:ListMultipartUploadParts\",\n");
-                builder.append("                \"s3:PutObject\"\n");
-                builder.append("            ],\n");
-                break;
-            case READ_WRITE:
-                builder.append("[\n");
-                builder.append("                \"s3:AbortMultipartUpload\",\n");
-                builder.append("                \"s3:DeleteObject\",\n");
-                builder.append("                \"s3:GetObject\",\n");
-                builder.append("                \"s3:ListMultipartUploadParts\",\n");
-                builder.append("                \"s3:PutObject\"\n");
-                builder.append("            ],\n");
-                break;
-            default:
-                builder.append("\"s3:GetObject\",\n");
-                break;
-        }
-        builder.append("            \"Effect\": \"Allow\",\n");
-        builder.append("            \"Principal\": \"*\",\n");
-        builder.append("            \"Resource\": \"arn:aws:s3:::");
-        builder.append(bucketName);
-        builder.append("/*\"\n");
-        builder.append("        }\n");
-        builder.append("    ],\n");
-        builder.append("    \"Version\": \"2012-10-17\"\n");
-        builder.append("}\n");
-        return builder.toString();
-    }
-}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudOssStrategy.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudOssStrategy.java
deleted file mode 100644
index 756462e..0000000
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudOssStrategy.java
+++ /dev/null
@@ -1,125 +0,0 @@
-package com.ruoyi.oss.service.impl;
-
-import com.qcloud.cos.COSClient;
-import com.qcloud.cos.ClientConfig;
-import com.qcloud.cos.auth.BasicCOSCredentials;
-import com.qcloud.cos.auth.COSCredentials;
-import com.qcloud.cos.http.HttpProtocol;
-import com.qcloud.cos.model.*;
-import com.qcloud.cos.region.Region;
-import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.oss.constant.OssConstant;
-import com.ruoyi.oss.entity.UploadResult;
-import com.ruoyi.oss.enumd.OssEnumd;
-import com.ruoyi.oss.exception.OssException;
-import com.ruoyi.oss.properties.OssProperties;
-import com.ruoyi.oss.service.abstractd.AbstractOssStrategy;
-import org.springframework.stereotype.Component;
-
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-
-/**
- * 鑵捐浜戝瓨鍌ㄧ瓥鐣�
- *
- * @author Lion Li
- */
-@Component
-public class QcloudOssStrategy extends AbstractOssStrategy {
-
-    private COSClient client;
-
-    @Override
-    public void init(OssProperties ossProperties) {
-        super.init(ossProperties);
-        try {
-            COSCredentials credentials = new BasicCOSCredentials(
-                properties.getAccessKey(), properties.getSecretKey());
-            // 鍒濆鍖栧鎴风閰嶇疆
-            ClientConfig clientConfig = new ClientConfig();
-            // 璁剧疆bucket鎵�鍦ㄧ殑鍖哄煙锛屽崕鍗楋細gz 鍗庡寳锛歵j 鍗庝笢锛歴h
-            clientConfig.setRegion(new Region(properties.getRegion()));
-            if (OssConstant.IS_HTTPS.equals(properties.getIsHttps())) {
-                clientConfig.setHttpProtocol(HttpProtocol.https);
-            } else {
-                clientConfig.setHttpProtocol(HttpProtocol.http);
-            }
-            client = new COSClient(credentials, clientConfig);
-            createBucket();
-        } catch (Exception e) {
-            throw new OssException("鑵捐浜戝瓨鍌ㄩ厤缃敊璇�! 璇锋鏌ョ郴缁熼厤缃�:[" + e.getMessage() + "]");
-        }
-        isInit = true;
-    }
-
-    @Override
-    public void createBucket() {
-        try {
-            String bucketName = properties.getBucketName();
-            if (client.doesBucketExist(bucketName)) {
-                return;
-            }
-            CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
-            createBucketRequest.setCannedAcl(CannedAccessControlList.PublicRead);
-            client.createBucket(createBucketRequest);
-        } catch (Exception e) {
-            throw new OssException("鍒涘缓Bucket澶辫触, 璇锋牳瀵硅吘璁簯閰嶇疆淇℃伅:[" + e.getMessage() + "]");
-        }
-    }
-
-    @Override
-    public OssEnumd getServiceType() {
-        return OssEnumd.QCLOUD;
-    }
-
-    @Override
-    public UploadResult upload(byte[] data, String path, String contentType) {
-        return upload(new ByteArrayInputStream(data), path, contentType);
-    }
-
-    @Override
-    public UploadResult upload(InputStream inputStream, String path, String contentType) {
-        try {
-            ObjectMetadata metadata = new ObjectMetadata();
-            metadata.setContentType(contentType);
-            client.putObject(new PutObjectRequest(properties.getBucketName(), path, inputStream, metadata));
-        } catch (Exception e) {
-            throw new OssException("涓婁紶鏂囦欢澶辫触锛岃妫�鏌ヨ吘璁簯閰嶇疆淇℃伅:[" + e.getMessage() + "]");
-        }
-        return UploadResult.builder().url(getEndpointLink() + "/" + path).filename(path).build();
-    }
-
-    @Override
-    public void delete(String path) {
-        path = path.replace(getEndpointLink() + "/", "");
-        try {
-            client.deleteObject(new DeleteObjectRequest(properties.getBucketName(), path));
-        } catch (Exception e) {
-            throw new OssException("涓婁紶鏂囦欢澶辫触锛岃妫�鑵捐浜戞煡閰嶇疆淇℃伅:[" + e.getMessage() + "]");
-        }
-    }
-
-    @Override
-    public UploadResult uploadSuffix(byte[] data, String suffix, String contentType) {
-        return upload(data, getPath(properties.getPrefix(), suffix), contentType);
-    }
-
-    @Override
-    public UploadResult uploadSuffix(InputStream inputStream, String suffix, String contentType) {
-        return upload(inputStream, getPath(properties.getPrefix(), suffix), contentType);
-    }
-
-    @Override
-    public String getEndpointLink() {
-        String endpoint = properties.getEndpoint();
-        StringBuilder sb = new StringBuilder(endpoint);
-        if (StringUtils.containsAnyIgnoreCase(endpoint, "http://")) {
-            sb.insert(7, properties.getBucketName() + ".");
-        } else if (StringUtils.containsAnyIgnoreCase(endpoint, "https://")) {
-            sb.insert(8, properties.getBucketName() + ".");
-        } else {
-            throw new OssException("Endpoint閰嶇疆閿欒");
-        }
-        return sb.toString();
-    }
-}
diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuOssStrategy.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuOssStrategy.java
deleted file mode 100644
index 20f13ec..0000000
--- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuOssStrategy.java
+++ /dev/null
@@ -1,127 +0,0 @@
-package com.ruoyi.oss.service.impl;
-
-import cn.hutool.core.util.ArrayUtil;
-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.constant.OssConstant;
-import com.ruoyi.oss.entity.UploadResult;
-import com.ruoyi.oss.enumd.OssEnumd;
-import com.ruoyi.oss.exception.OssException;
-import com.ruoyi.oss.properties.OssProperties;
-import com.ruoyi.oss.service.abstractd.AbstractOssStrategy;
-import org.springframework.stereotype.Component;
-
-import java.io.InputStream;
-
-/**
- * 涓冪墰浜戝瓨鍌ㄧ瓥鐣�
- *
- * @author Lion Li
- */
-@Component
-public class QiniuOssStrategy extends AbstractOssStrategy {
-
-    private UploadManager uploadManager;
-    private BucketManager bucketManager;
-    private Auth auth;
-
-
-    @Override
-    public void init(OssProperties ossProperties) {
-        super.init(ossProperties);
-        try {
-            Configuration config = new Configuration(getRegion(properties.getRegion()));
-            // https璁剧疆
-            config.useHttpsDomains = OssConstant.IS_HTTPS.equals(properties.getIsHttps());
-            uploadManager = new UploadManager(config);
-            auth = Auth.create(properties.getAccessKey(), properties.getSecretKey());
-            bucketManager = new BucketManager(auth, config);
-            createBucket();
-        } catch (Exception e) {
-            throw new OssException("涓冪墰浜戝瓨鍌ㄩ厤缃敊璇�! 璇锋鏌ョ郴缁熼厤缃�:[" + e.getMessage() + "]");
-        }
-        isInit = true;
-    }
-
-    @Override
-    public void createBucket() {
-        try {
-            String bucketName = properties.getBucketName();
-            if (ArrayUtil.contains(bucketManager.buckets(), bucketName)) {
-                return;
-            }
-            bucketManager.createBucket(bucketName, properties.getRegion());
-        } catch (Exception e) {
-            throw new OssException("鍒涘缓Bucket澶辫触, 璇锋牳瀵逛竷鐗涗簯閰嶇疆淇℃伅:[" + e.getMessage() + "]");
-        }
-    }
-
-    @Override
-    public OssEnumd getServiceType() {
-        return OssEnumd.QINIU;
-    }
-
-    @Override
-    public UploadResult upload(byte[] data, String path, String contentType) {
-        try {
-            String token = auth.uploadToken(properties.getBucketName());
-            Response res = uploadManager.put(data, path, token, null, contentType, false);
-            if (!res.isOK()) {
-                throw new RuntimeException("涓婁紶涓冪墰鍑洪敊锛�" + res.error);
-            }
-        } catch (Exception e) {
-            throw new OssException("涓婁紶鏂囦欢澶辫触锛岃鏍稿涓冪墰閰嶇疆淇℃伅:[" + e.getMessage() + "]");
-        }
-        return UploadResult.builder().url(getEndpointLink() + "/" + path).filename(path).build();
-    }
-
-    @Override
-    public void delete(String path) {
-        try {
-            path = path.replace(getEndpointLink() + "/", "");
-            Response res = bucketManager.delete(properties.getBucketName(), path);
-            if (!res.isOK()) {
-                throw new RuntimeException("鍒犻櫎涓冪墰鏂囦欢鍑洪敊锛�" + res.error);
-            }
-        } catch (Exception e) {
-            throw new OssException(e.getMessage());
-        }
-    }
-
-    @Override
-    public UploadResult uploadSuffix(byte[] data, String suffix, String contentType) {
-        return upload(data, getPath(properties.getPrefix(), suffix), contentType);
-    }
-
-    @Override
-    public UploadResult uploadSuffix(InputStream inputStream, String suffix, String contentType) {
-        return upload(inputStream, getPath(properties.getPrefix(), suffix), contentType);
-    }
-
-    @Override
-    public String getEndpointLink() {
-        return properties.getEndpoint();
-    }
-
-    private Region getRegion(String region) {
-        switch (region) {
-            case "z0":
-                return Region.region0();
-            case "z1":
-                return Region.region1();
-            case "z2":
-                return Region.region2();
-            case "na0":
-                return Region.regionNa0();
-            case "as0":
-                return Region.regionAs0();
-            default:
-                return Region.autoRegion();
-        }
-    }
-
-}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOssConfig.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOssConfig.java
index a8340df..577f17f 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOssConfig.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOssConfig.java
@@ -5,7 +5,6 @@
 import com.ruoyi.common.core.domain.BaseEntity;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
 
 /**
  * 瀵硅薄瀛樺偍閰嶇疆瀵硅薄 sys_oss_config
@@ -54,6 +53,11 @@
     private String endpoint;
 
     /**
+     * 鑷畾涔夊煙鍚�
+     */
+    private String domain;
+
+    /**
      * 鏄惁https锛�0鍚� 1鏄級
      */
     private String isHttps;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysOssConfigBo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysOssConfigBo.java
index 9a66e38..ddcdeee 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysOssConfigBo.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysOssConfigBo.java
@@ -35,8 +35,8 @@
     /**
      * 閰嶇疆key
      */
-    @ApiModelProperty(value = "configKey", required = true)
-    @NotBlank(message = "configKey涓嶈兘涓虹┖", groups = {AddGroup.class, EditGroup.class})
+    @ApiModelProperty(value = "閰嶇疆key", required = true)
+    @NotBlank(message = "閰嶇疆key涓嶈兘涓虹┖", groups = {AddGroup.class, EditGroup.class})
     @Size(min = 2, max = 100, message = "configKey闀垮害蹇呴』浠嬩簬2鍜�20 涔嬮棿")
     private String configKey;
 
@@ -59,8 +59,8 @@
     /**
      * 妗跺悕绉�
      */
-    @ApiModelProperty(value = "bucketName", required = true)
-    @NotBlank(message = "bucketName涓嶈兘涓虹┖", groups = {AddGroup.class, EditGroup.class})
+    @ApiModelProperty(value = "妗跺悕绉�", required = true)
+    @NotBlank(message = "妗跺悕绉颁笉鑳戒负绌�", groups = {AddGroup.class, EditGroup.class})
     @Size(min = 2, max = 100, message = "bucketName闀垮害蹇呴』浠嬩簬2鍜�100涔嬮棿")
     private String bucketName;
 
@@ -73,10 +73,16 @@
     /**
      * 璁块棶绔欑偣
      */
-    @ApiModelProperty(value = "endpoint", required = true)
-    @NotBlank(message = "endpoint涓嶈兘涓虹┖", groups = {AddGroup.class, EditGroup.class})
+    @ApiModelProperty(value = "璁块棶绔欑偣", required = true)
+    @NotBlank(message = "璁块棶绔欑偣涓嶈兘涓虹┖", groups = {AddGroup.class, EditGroup.class})
     @Size(min = 2, max = 100, message = "endpoint闀垮害蹇呴』浠嬩簬2鍜�100涔嬮棿")
     private String endpoint;
+
+    /**
+     * 鑷畾涔夊煙鍚�
+     */
+    @ApiModelProperty("鑷畾涔夊煙鍚�")
+    private String domain;
 
     /**
      * 鏄惁https锛圷=鏄�,N=鍚︼級
@@ -93,7 +99,7 @@
     /**
      * 鍩�
      */
-    @ApiModelProperty(value = "region")
+    @ApiModelProperty(value = "鍩�")
     private String region;
 
     /**
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysOssConfigVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysOssConfigVo.java
index 0fb08dd..20edaca 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysOssConfigVo.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysOssConfigVo.java
@@ -63,6 +63,12 @@
     private String endpoint;
 
     /**
+     * 鑷畾涔夊煙鍚�
+     */
+    @ApiModelProperty("鑷畾涔夊煙鍚�")
+    private String domain;
+
+    /**
      * 鏄惁https锛圷=鏄�,N=鍚︼級
      */
     @ApiModelProperty("鏄惁https锛圷=鏄�,N=鍚︼級")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java
index 19423f4..25dfd5c 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java
@@ -7,9 +7,9 @@
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.oss.core.OssClient;
 import com.ruoyi.oss.entity.UploadResult;
 import com.ruoyi.oss.factory.OssFactory;
-import com.ruoyi.oss.service.IOssStrategy;
 import com.ruoyi.system.domain.SysOss;
 import com.ruoyi.system.domain.bo.SysOssBo;
 import com.ruoyi.system.domain.vo.SysOssVo;
@@ -65,7 +65,7 @@
     public SysOss upload(MultipartFile file) {
         String originalfileName = file.getOriginalFilename();
         String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length());
-        IOssStrategy storage = OssFactory.instance();
+        OssClient storage = OssFactory.instance();
         UploadResult uploadResult;
         try {
             uploadResult = storage.uploadSuffix(file.getBytes(), suffix, file.getContentType());
@@ -78,7 +78,7 @@
         oss.setFileSuffix(suffix);
         oss.setFileName(uploadResult.getFilename());
         oss.setOriginalName(originalfileName);
-        oss.setService(storage.getServiceType().getValue());
+        oss.setService(storage.getConfigKey());
         baseMapper.insert(oss);
         return oss;
     }
@@ -90,7 +90,7 @@
         }
         List<SysOss> list = baseMapper.selectBatchIds(ids);
         for (SysOss sysOss : list) {
-            IOssStrategy storage = OssFactory.instance(sysOss.getService());
+            OssClient storage = OssFactory.instance(sysOss.getService());
             storage.delete(sysOss.getUrl());
         }
         return baseMapper.deleteBatchIds(ids) > 0;
diff --git a/ruoyi-ui/src/views/system/oss/config.vue b/ruoyi-ui/src/views/system/oss/config.vue
index 152727e..54ad98c 100644
--- a/ruoyi-ui/src/views/system/oss/config.vue
+++ b/ruoyi-ui/src/views/system/oss/config.vue
@@ -2,14 +2,13 @@
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
       <el-form-item label="閰嶇疆key" prop="configKey">
-        <el-select v-model="queryParams.configKey" placeholder="璇烽�夋嫨閰嶇疆key" clearable size="small">
-          <el-option
-            v-for="configKey in configKeyOptions"
-            :key="configKey.configKey"
-            :label="configKey.label"
-            :value="configKey.configKey"
-          />
-        </el-select>
+        <el-input
+          v-model="queryParams.configKey"
+          placeholder="閰嶇疆key"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
       </el-form-item>
       <el-form-item label="妗跺悕绉�" prop="bucketName">
         <el-input
@@ -77,6 +76,7 @@
       <el-table-column label="涓诲缓" align="center" prop="ossConfigId" v-if="false"/>
       <el-table-column label="閰嶇疆key" align="center" prop="configKey" />
       <el-table-column label="璁块棶绔欑偣" align="center" prop="endpoint" width="200" />
+      <el-table-column label="鑷畾涔夊煙鍚�" align="center" prop="domain" width="200" />
       <el-table-column label="妗跺悕绉�" align="center" prop="bucketName" />
       <el-table-column label="鍓嶇紑" align="center" prop="prefix" />
       <el-table-column label="鍩�" align="center" prop="region" />
@@ -122,17 +122,13 @@
     <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="120px">
         <el-form-item label="閰嶇疆key" prop="configKey">
-          <el-select v-model="form.configKey" placeholder="璇烽�夋嫨閰嶇疆key">
-            <el-option
-              v-for="configKey in configKeyOptions"
-              :key="configKey.configKey"
-              :label="configKey.label"
-              :value="configKey.configKey"
-            />
-          </el-select>
+          <el-input v-model="form.configKey" placeholder="璇疯緭鍏ラ厤缃甼ey" />
         </el-form-item>
         <el-form-item label="璁块棶绔欑偣" prop="endpoint">
           <el-input v-model="form.endpoint" placeholder="璇疯緭鍏ヨ闂珯鐐�" />
+        </el-form-item>
+        <el-form-item label="鑷畾涔夊煙鍚�" prop="domain">
+          <el-input v-model="form.domain" placeholder="璇疯緭鍏ヨ嚜瀹氫箟鍩熷悕" />
         </el-form-item>
         <el-form-item label="accessKey" prop="accessKey">
           <el-input v-model="form.accessKey" placeholder="璇疯緭鍏ccessKey" />
@@ -204,14 +200,6 @@
       total: 0,
       // 瀵硅薄瀛樺偍閰嶇疆琛ㄦ牸鏁版嵁
       ossConfigList: [],
-      // configKeyOptions
-      configKeyOptions: [],
-      configKeyDatas: [
-        { configKey: "minio", label: "Minio" },
-        { configKey: "qiniu", label: "涓冪墰浜�" },
-        { configKey: "aliyun", label: "闃块噷浜�" },
-        { configKey: "qcloud", label: "鑵捐浜�" },
-      ],
       // 寮瑰嚭灞傛爣棰�
       title: "",
       // 鏄惁鏄剧ず寮瑰嚭灞�
@@ -276,7 +264,6 @@
   },
   created() {
     this.getList();
-    this.configKeyOptions = this.configKeyDatas;
   },
   methods: {
     /** 鏌ヨ瀵硅薄瀛樺偍閰嶇疆鍒楄〃 */
@@ -303,6 +290,7 @@
         bucketName: undefined,
         prefix: undefined,
         endpoint: undefined,
+        domain: undefined,
         isHttps: "N",
         region: undefined,
         status: "1",
diff --git a/script/sql/oracle/oracle_ry_vue_4.X.sql b/script/sql/oracle/oracle_ry_vue_4.X.sql
index 68b29e9..583f526 100644
--- a/script/sql/oracle/oracle_ry_vue_4.X.sql
+++ b/script/sql/oracle/oracle_ry_vue_4.X.sql
@@ -904,6 +904,7 @@
   bucket_name     varchar(255)  default '',
   prefix          varchar(255)  default '',
   endpoint        varchar(255)  default '',
+  domain          varchar(255)  default '',
   is_https        char(1)       default 'N',
   region          varchar(255)  default '',
   status          char(1)       default '1',
@@ -925,6 +926,7 @@
 comment on column sys_oss_config.bucket_name is '妗跺悕绉�';
 comment on column sys_oss_config.prefix is '鍓嶇紑';
 comment on column sys_oss_config.endpoint is '璁块棶绔欑偣';
+comment on column sys_oss_config.domain is '鑷畾涔夊煙鍚�';
 comment on column sys_oss_config.is_https is '鏄惁https锛圷=鏄�,N=鍚︼級';
 comment on column sys_oss_config.region is '鍩�';
 comment on column sys_oss_config.status is '鐘舵�侊紙0=姝e父,1=鍋滅敤锛�';
@@ -935,10 +937,12 @@
 comment on column sys_oss_config.update_by is '鏇存柊鑰�';
 comment on column sys_oss_config.update_time is '鏇存柊鏃堕棿';
 
-insert into sys_oss_config values (1, 'minio',  'ruoyi',            'ruoyi123',        'ruoyi',             '', 'http://localhost:9000',                'N', '',            '0', '', NULL, 'admin', sysdate, 'admin', sysdate);
-insert into sys_oss_config values (2, 'qiniu',  'XXXXXXXXXXXXXXX',  'XXXXXXXXXXXXXXX', 'ruoyi',             '', 'http://XXX.XXXX.com',                  'N', 'z0',          '1', '', NULL, 'admin', sysdate, 'admin', sysdate);
-insert into sys_oss_config values (3, 'aliyun', 'XXXXXXXXXXXXXXX',  'XXXXXXXXXXXXXXX', 'ruoyi',             '', 'http://oss-cn-beijing.aliyuncs.com',   'N', '',            '1', '', NULL, 'admin', sysdate, 'admin', sysdate);
-insert into sys_oss_config values (4, 'qcloud', 'XXXXXXXXXXXXXXX',  'XXXXXXXXXXXXXXX', 'ruoyi-1250000000',  '', 'http://cos.ap-beijing.myqcloud.com',   'N', 'ap-beijing',  '1', '', NULL, 'admin', sysdate, 'admin', sysdate);
+insert into sys_oss_config values (1, 'minio',  'ruoyi',            'ruoyi123',        'ruoyi',             '', 'localhost:9000',                '','N', '',            '0', '', NULL, 'admin', sysdate, 'admin', sysdate);
+insert into sys_oss_config values (2, 'qiniu',  'XXXXXXXXXXXXXXX',  'XXXXXXXXXXXXXXX', 'ruoyi',             '', 's3-cn-north-1.qiniucs.com',     '','N', '',            '1', '', NULL, 'admin', sysdate, 'admin', sysdate);
+insert into sys_oss_config values (3, 'aliyun', 'XXXXXXXXXXXXXXX',  'XXXXXXXXXXXXXXX', 'ruoyi',             '', 'oss-cn-beijing.aliyuncs.com',   '','N', '',            '1', '', NULL, 'admin', sysdate, 'admin', sysdate);
+insert into sys_oss_config values (4, 'qcloud', 'XXXXXXXXXXXXXXX',  'XXXXXXXXXXXXXXX', 'ruoyi-1250000000',  '', 'cos.ap-beijing.myqcloud.com',   '','N', 'ap-beijing',  '1', '', NULL, 'admin', sysdate, 'admin', sysdate);
+insert into sys_oss_config values (5, 'image',  'ruoyi',            'ruoyi123',        'ruoyi',             'image', 'localhost:9000',           '','N', '',            '1', '', NULL, 'admin', sysdate, 'admin', sysdate);
+
 
 -- ----------------------------
 -- 閽╁瓙 锛岀敤浜巗ession杩炴帴涔嬪悗 鑷姩璁剧疆榛樿鐨刣ate绫诲瀷鏍煎紡鍖� 绠�鍖栨椂闂存煡璇�
diff --git a/script/sql/postgres/postgres_ry_vue_4.X.sql b/script/sql/postgres/postgres_ry_vue_4.X.sql
index 850491f..f4e3026 100644
--- a/script/sql/postgres/postgres_ry_vue_4.X.sql
+++ b/script/sql/postgres/postgres_ry_vue_4.X.sql
@@ -917,6 +917,7 @@
     bucket_name   varchar(255) default ''::varchar,
     prefix        varchar(255) default ''::varchar,
     endpoint      varchar(255) default ''::varchar,
+    domain        varchar(255) default ''::varchar,
     is_https      char         default 'N'::bpchar,
     region        varchar(255) default ''::varchar,
     status        char         default '1'::bpchar,
@@ -937,6 +938,7 @@
 comment on column sys_oss_config.bucket_name is '妗跺悕绉�';
 comment on column sys_oss_config.prefix is '鍓嶇紑';
 comment on column sys_oss_config.endpoint is '璁块棶绔欑偣';
+comment on column sys_oss_config.domain is '鑷畾涔夊煙鍚�';
 comment on column sys_oss_config.is_https is '鏄惁https锛圷=鏄�,N=鍚︼級';
 comment on column sys_oss_config.region is '鍩�';
 comment on column sys_oss_config.status is '鐘舵�侊紙0=姝e父,1=鍋滅敤锛�';
@@ -947,7 +949,9 @@
 comment on column sys_oss_config.update_time is '鏇存柊鏃堕棿';
 comment on column sys_oss_config.remark is '澶囨敞';
 
-insert into sys_oss_config values (1, 'minio',  'ruoyi',            'ruoyi123',        'ruoyi',             '', 'http://localhost:9000',                'N', '',            '0', '', 'admin', now(), 'admin', now(), null);
-insert into sys_oss_config values (2, 'qiniu',  'XXXXXXXXXXXXXXX',  'XXXXXXXXXXXXXXX', 'ruoyi',             '', 'http://XXX.XXXX.com',                  'N', 'z0',          '1', '', 'admin', now(), 'admin', now(), null);
-insert into sys_oss_config values (3, 'aliyun', 'XXXXXXXXXXXXXXX',  'XXXXXXXXXXXXXXX', 'ruoyi',             '', 'http://oss-cn-beijing.aliyuncs.com',   'N', '',            '1', '', 'admin', now(), 'admin', now(), null);
-insert into sys_oss_config values (4, 'qcloud', 'XXXXXXXXXXXXXXX',  'XXXXXXXXXXXXXXX', 'ruoyi-1250000000',  '', 'http://cos.ap-beijing.myqcloud.com',   'N', 'ap-beijing',  '1', '', 'admin', now(), 'admin', now(), null);
+insert into sys_oss_config values (1, 'minio',  'ruoyi',            'ruoyi123',        'ruoyi',             '', 'localhost:9000',                      '','N', '',            '0', '', 'admin', now(), 'admin', now(), null);
+insert into sys_oss_config values (2, 'qiniu',  'XXXXXXXXXXXXXXX',  'XXXXXXXXXXXXXXX', 'ruoyi',             '', 's3-cn-north-1.qiniucs.com',           '','N', '',            '1', '', 'admin', now(), 'admin', now(), null);
+insert into sys_oss_config values (3, 'aliyun', 'XXXXXXXXXXXXXXX',  'XXXXXXXXXXXXXXX', 'ruoyi',             '', 'oss-cn-beijing.aliyuncs.com',         '','N', '',            '1', '', 'admin', now(), 'admin', now(), null);
+insert into sys_oss_config values (4, 'qcloud', 'XXXXXXXXXXXXXXX',  'XXXXXXXXXXXXXXX', 'ruoyi-1250000000',  '', 'cos.ap-beijing.myqcloud.com',         '','N', 'ap-beijing',  '1', '', 'admin', now(), 'admin', now(), null);
+insert into sys_oss_config values (5, 'image',  'ruoyi',            'ruoyi123',        'ruoyi',             'image', 'localhost:9000',                 '','N', '',            '1', '', 'admin', now(), 'admin', now(), NULL);
+
diff --git a/script/sql/ry_vue_4.X.sql b/script/sql/ry_vue_4.X.sql
index e190186..2384b14 100644
--- a/script/sql/ry_vue_4.X.sql
+++ b/script/sql/ry_vue_4.X.sql
@@ -668,6 +668,7 @@
   bucket_name     varchar(255)            default ''      comment '妗跺悕绉�',
   prefix           varchar(255)           default ''      comment '鍓嶇紑',
   endpoint         varchar(255)           default ''      comment '璁块棶绔欑偣',
+  domain           varchar(255)           default ''      comment '鑷畾涔夊煙鍚�',
   is_https         char(1)                default 'N'     comment '鏄惁https锛圷=鏄�,N=鍚︼級',
   region           varchar(255)           default ''      comment '鍩�',
   status           char(1)                default '1'     comment '鐘舵�侊紙0=姝e父,1=鍋滅敤锛�',
@@ -680,7 +681,9 @@
   primary key (oss_config_id)
 ) engine=innodb comment='瀵硅薄瀛樺偍閰嶇疆琛�';
 
-insert into sys_oss_config values (1, 'minio',  'ruoyi',            'ruoyi123',        'ruoyi',             '', 'http://localhost:9000',                'N', '',            '0', '', 'admin', sysdate(), 'admin', sysdate(), NULL);
-insert into sys_oss_config values (2, 'qiniu',  'XXXXXXXXXXXXXXX',  'XXXXXXXXXXXXXXX', 'ruoyi',             '', 'http://XXX.XXXX.com',                  'N', 'z0',          '1', '', 'admin', sysdate(), 'admin', sysdate(), NULL);
-insert into sys_oss_config values (3, 'aliyun', 'XXXXXXXXXXXXXXX',  'XXXXXXXXXXXXXXX', 'ruoyi',             '', 'http://oss-cn-beijing.aliyuncs.com',   'N', '',            '1', '', 'admin', sysdate(), 'admin', sysdate(), NULL);
-insert into sys_oss_config values (4, 'qcloud', 'XXXXXXXXXXXXXXX',  'XXXXXXXXXXXXXXX', 'ruoyi-1250000000',  '', 'http://cos.ap-beijing.myqcloud.com',   'N', 'ap-beijing',  '1', '', 'admin', sysdate(), 'admin', sysdate(), NULL);
+insert into sys_oss_config values (1, 'minio',  'ruoyi',            'ruoyi123',        'ruoyi',             '', 'localhost:9000',                '','N', '',            '0', '', 'admin', sysdate(), 'admin', sysdate(), NULL);
+insert into sys_oss_config values (2, 'qiniu',  'XXXXXXXXXXXXXXX',  'XXXXXXXXXXXXXXX', 'ruoyi',             '', 's3-cn-north-1.qiniucs.com',     '','N', '',            '1', '', 'admin', sysdate(), 'admin', sysdate(), NULL);
+insert into sys_oss_config values (3, 'aliyun', 'XXXXXXXXXXXXXXX',  'XXXXXXXXXXXXXXX', 'ruoyi',             '', 'oss-cn-beijing.aliyuncs.com',   '','N', '',            '1', '', 'admin', sysdate(), 'admin', sysdate(), NULL);
+insert into sys_oss_config values (4, 'qcloud', 'XXXXXXXXXXXXXXX',  'XXXXXXXXXXXXXXX', 'ruoyi-1250000000',  '', 'cos.ap-beijing.myqcloud.com',   '','N', 'ap-beijing',  '1', '', 'admin', sysdate(), 'admin', sysdate(), NULL);
+insert into sys_oss_config values (5, 'image',  'ruoyi',            'ruoyi123',        'ruoyi',             'image', 'localhost:9000',           '','N', '',            '1', '', 'admin', sysdate(), 'admin', sysdate(), NULL);
+
diff --git a/script/sql/sqlserver/sqlserver_ry_vue_4.X.sql b/script/sql/sqlserver/sqlserver_ry_vue_4.X.sql
index d37f1b4..2bf4b51 100644
--- a/script/sql/sqlserver/sqlserver_ry_vue_4.X.sql
+++ b/script/sql/sqlserver/sqlserver_ry_vue_4.X.sql
@@ -2193,6 +2193,7 @@
     [bucket_name]   nvarchar(255) DEFAULT ''    NULL,
     [prefix]        nvarchar(255) DEFAULT ''    NULL,
     [endpoint]      nvarchar(255) DEFAULT ''    NULL,
+    [domain]        nvarchar(255) DEFAULT ''    NULL,
     [is_https]      nchar(1)      DEFAULT ('N') NULL,
     [region]        nvarchar(255) DEFAULT ''    NULL,
     [status]        nchar(1)      DEFAULT ('1') NULL,
@@ -2250,6 +2251,12 @@
     'SCHEMA', N'dbo',
     'TABLE', N'sys_oss_config',
     'COLUMN', N'endpoint'
+GO
+EXEC sp_addextendedproperty
+     'MS_Description', N'鑷畾涔夊煙鍚�',
+     'SCHEMA', N'dbo',
+     'TABLE', N'sys_oss_config',
+     'COLUMN', N'domain'
 GO
 EXEC sp_addextendedproperty
     'MS_Description', N'鏄惁https锛圷=鏄�,N=鍚︼級',
@@ -2311,11 +2318,13 @@
     'TABLE', N'sys_oss_config'
 GO
 
-INSERT INTO [sys_oss_config] ([oss_config_id], [config_key], [access_key], [secret_key], [bucket_name], [prefix], [endpoint], [is_https], [region], [status], [ext1], [create_by], [create_time], [update_by], [update_time], [remark]) VALUES (N'1', N'minio', N'lihongbo', N'lihongbo.123', N'ruoyi', N'', N'http://81.70.150.73:9000', N'N', N'', N'0', N'', N'admin', getdate(), N'admin', getdate(), NULL)
+INSERT INTO [sys_oss_config] ([oss_config_id], [config_key], [access_key], [secret_key], [bucket_name], [prefix], [endpoint], [domain], [is_https], [region], [status], [ext1], [create_by], [create_time], [update_by], [update_time], [remark]) VALUES (N'1', N'minio', N'ruoyi',            N'ruoyi123',        N'ruoyi',            N'', N'localhost:9000',                    N'',N'N', N'',           N'0', N'', N'admin', getdate(), N'admin', getdate(), NULL)
 GO
-INSERT INTO [sys_oss_config] ([oss_config_id], [config_key], [access_key], [secret_key], [bucket_name], [prefix], [endpoint], [is_https], [region], [status], [ext1], [create_by], [create_time], [update_by], [update_time], [remark]) VALUES (N'2', N'qiniu', N'XXXXXXXXXXXXXXXX', N'XXXXXXXXXXXXXXX', N'ruoyi', N'', N'http://XXX.XXXX.com', N'N', N'z0', N'1', N'', N'admin', getdate(), N'admin', getdate(), NULL)
+INSERT INTO [sys_oss_config] ([oss_config_id], [config_key], [access_key], [secret_key], [bucket_name], [prefix], [endpoint], [domain], [is_https], [region], [status], [ext1], [create_by], [create_time], [update_by], [update_time], [remark]) VALUES (N'2', N'qiniu', N'XXXXXXXXXXXXXXXX', N'XXXXXXXXXXXXXXX', N'ruoyi',            N'', N's3-cn-north-1.qiniucs.com',         N'',N'N', N'',           N'1', N'', N'admin', getdate(), N'admin', getdate(), NULL)
 GO
-INSERT INTO [sys_oss_config] ([oss_config_id], [config_key], [access_key], [secret_key], [bucket_name], [prefix], [endpoint], [is_https], [region], [status], [ext1], [create_by], [create_time], [update_by], [update_time], [remark]) VALUES (N'3', N'aliyun', N'XXXXXXXXXXXXXXX', N'XXXXXXXXXXXXXXX', N'ruoyi', N'', N'http://oss-cn-beijing.aliyuncs.com', N'N', N'', N'1', N'', N'admin', getdate(), N'admin', getdate(), NULL)
+INSERT INTO [sys_oss_config] ([oss_config_id], [config_key], [access_key], [secret_key], [bucket_name], [prefix], [endpoint], [domain], [is_https], [region], [status], [ext1], [create_by], [create_time], [update_by], [update_time], [remark]) VALUES (N'3', N'aliyun', N'XXXXXXXXXXXXXXX', N'XXXXXXXXXXXXXXX', N'ruoyi',            N'', N'oss-cn-beijing.aliyuncs.com',       N'',N'N', N'',           N'1', N'', N'admin', getdate(), N'admin', getdate(), NULL)
 GO
-INSERT INTO [sys_oss_config] ([oss_config_id], [config_key], [access_key], [secret_key], [bucket_name], [prefix], [endpoint], [is_https], [region], [status], [ext1], [create_by], [create_time], [update_by], [update_time], [remark]) VALUES (N'4', N'qcloud', N'XXXXXXXXXXXXXXX', N'XXXXXXXXXXXXXXX', N'ruoyi-1250000000', N'', N'http://cos.ap-beijing.myqcloud.com', N'N', N'ap-beijing', N'1', N'', N'admin', getdate(), N'admin', getdate(), NULL)
+INSERT INTO [sys_oss_config] ([oss_config_id], [config_key], [access_key], [secret_key], [bucket_name], [prefix], [endpoint], [domain], [is_https], [region], [status], [ext1], [create_by], [create_time], [update_by], [update_time], [remark]) VALUES (N'4', N'qcloud', N'XXXXXXXXXXXXXXX', N'XXXXXXXXXXXXXXX', N'ruoyi-1250000000', N'', N'cos.ap-beijing.myqcloud.com',       N'',N'N', N'ap-beijing', N'1', N'', N'admin', getdate(), N'admin', getdate(), NULL)
+GO
+INSERT INTO [sys_oss_config] ([oss_config_id], [config_key], [access_key], [secret_key], [bucket_name], [prefix], [endpoint], [domain], [is_https], [region], [status], [ext1], [create_by], [create_time], [update_by], [update_time], [remark]) VALUES (N'4', N'image',  N'ruoyi',           N'ruoyi123',        N'ruoyi',            N'image', N'localhost:9000',               N'',N'N', N'',           N'1', N'', N'admin', getdate(), N'admin', getdate(), NULL)
 GO
diff --git a/script/sql/update/oracle/update-4.1-4.2.sql b/script/sql/update/oracle/update-4.1-4.2.sql
new file mode 100644
index 0000000..a4b52fd
--- /dev/null
+++ b/script/sql/update/oracle/update-4.1-4.2.sql
@@ -0,0 +1,10 @@
+ALTER TABLE "SYS_OSS_CONFIG" ADD ("DOMAIN" VARCHAR2(255));
+
+COMMENT ON COLUMN "SYS_OSS_CONFIG"."DOMAIN" IS '鑷畾涔夊煙鍚�';
+
+update sys_oss_config set endpoint = 'localhost:9000' where oss_config_id = 1;
+update sys_oss_config set endpoint = 's3-cn-north-1.qiniucs.com', region = '' where oss_config_id = 2;
+update sys_oss_config set endpoint = 'oss-cn-beijing.aliyuncs.com' where oss_config_id = 3;
+update sys_oss_config set endpoint = 'cos.ap-beijing.myqcloud.com' where oss_config_id = 4;
+
+insert into sys_oss_config values (5, 'image', 'ruoyi', 'ruoyi123', 'ruoyi', 'image', 'localhost:9000', '','N', '', '1', '', NULL, 'admin', sysdate, 'admin', sysdate);
diff --git a/script/sql/update/postgres/update-4.1-4.2.sql b/script/sql/update/postgres/update-4.1-4.2.sql
new file mode 100644
index 0000000..435dd39
--- /dev/null
+++ b/script/sql/update/postgres/update-4.1-4.2.sql
@@ -0,0 +1,11 @@
+ALTER TABLE "sys_oss_config" ADD COLUMN "domain" varchar(255);
+
+COMMENT ON COLUMN "sys_oss_config"."domain" IS '鑷畾涔夊煙鍚�';
+
+update sys_oss_config set endpoint = 'localhost:9000' where oss_config_id = 1;
+update sys_oss_config set endpoint = 's3-cn-north-1.qiniucs.com', region = '' where oss_config_id = 2;
+update sys_oss_config set endpoint = 'oss-cn-beijing.aliyuncs.com' where oss_config_id = 3;
+update sys_oss_config set endpoint = 'cos.ap-beijing.myqcloud.com' where oss_config_id = 4;
+
+insert into sys_oss_config values (5, 'image',  'ruoyi', 'ruoyi123', 'ruoyi', 'image', 'localhost:9000', '','N', '', '1', '', 'admin', now(), 'admin', now(), NULL);
+
diff --git a/script/sql/update/sqlserver/update-4.1-4.2.sql b/script/sql/update/sqlserver/update-4.1-4.2.sql
new file mode 100644
index 0000000..4a07d51
--- /dev/null
+++ b/script/sql/update/sqlserver/update-4.1-4.2.sql
@@ -0,0 +1,24 @@
+ALTER TABLE [sys_oss_config] ADD [domain] nvarchar(255) DEFAULT '' NULL
+GO
+
+EXEC sp_addextendedproperty
+'MS_Description', N'鑷畾涔夊煙鍚�',
+'SCHEMA', N'dbo',
+'TABLE', N'sys_oss_config',
+'COLUMN', N'domain'
+GO
+
+UPDATE [sys_oss_config] SET [access_key] = N'ruoyi', [secret_key] = N'ruoyi123', [endpoint] = N'localhost:9000' WHERE [oss_config_id] = 1
+GO
+
+UPDATE [sys_oss_config] SET [endpoint] = N's3-cn-north-1.qiniucs.com' WHERE [oss_config_id] = 2
+GO
+
+UPDATE [sys_oss_config] SET [endpoint] = N'oss-cn-beijing.aliyuncs.com' WHERE [oss_config_id] = 3
+GO
+
+UPDATE [sys_oss_config] SET [endpoint] = N'cos.ap-beijing.myqcloud.com' WHERE [oss_config_id] = 4
+GO
+
+INSERT INTO [sys_oss_config] ([oss_config_id], [config_key], [access_key], [secret_key], [bucket_name], [prefix], [endpoint], [domain], [is_https], [region], [status], [ext1], [create_by], [create_time], [update_by], [update_time], [remark]) VALUES (N'4', N'image',  N'ruoyi', N'ruoyi123', N'ruoyi', N'image', N'localhost:9000', N'',N'N', N'', N'1', N'', N'admin', getdate(), N'admin', getdate(), NULL)
+GO
diff --git a/script/sql/update/update-4.1-4.2.sql b/script/sql/update/update-4.1-4.2.sql
new file mode 100644
index 0000000..28a9ad7
--- /dev/null
+++ b/script/sql/update/update-4.1-4.2.sql
@@ -0,0 +1,9 @@
+alter table sys_oss_config add column domain varchar(255) null default '' COMMENT '鑷畾涔夊煙鍚�';
+
+update sys_oss_config set endpoint = 'localhost:9000' where oss_config_id = 1;
+update sys_oss_config set endpoint = 's3-cn-north-1.qiniucs.com', region = '' where oss_config_id = 2;
+update sys_oss_config set endpoint = 'oss-cn-beijing.aliyuncs.com' where oss_config_id = 3;
+update sys_oss_config set endpoint = 'cos.ap-beijing.myqcloud.com' where oss_config_id = 4;
+
+insert into sys_oss_config values (5, 'image',  'ruoyi', 'ruoyi123', 'ruoyi', 'image', 'localhost:9000', '','N', '', '1', '', 'admin', sysdate(), 'admin', sysdate(), NULL);
+

--
Gitblit v1.9.3