xdd hace 1 mes
padre
commit
02fbd455db

+ 5 - 1
fs-service-system/pom.xml

@@ -169,7 +169,11 @@
             <artifactId>spring-boot-starter-test</artifactId>
         </dependency>
 
-
+        <dependency>
+            <groupId>com.huaweicloud</groupId>
+            <artifactId>esdk-obs-java-bundle</artifactId>
+            <version>3.23.9</version>
+        </dependency>
         <dependency>
             <groupId>com.github.ben-manes.caffeine</groupId>
             <artifactId>caffeine</artifactId>

+ 6 - 2
fs-service-system/src/main/java/com/fs/system/oss/CloudConstant.java

@@ -23,7 +23,11 @@ public class CloudConstant
         /**
          * 腾讯云
          */
-        QCLOUD(3);
+        QCLOUD(3),
+        /**
+         * 华为云
+         */
+        HUAWEI(4);
         private int value;
 
         CloudService(int value)
@@ -36,4 +40,4 @@ public class CloudConstant
             return value;
         }
     }
-}
+}

+ 60 - 0
fs-service-system/src/main/java/com/fs/system/oss/CloudStorageConfig.java

@@ -2,6 +2,7 @@ package com.fs.system.oss;
 
 
 import com.fs.system.oss.valdator.AliyunGroup;
+import com.fs.system.oss.valdator.HuaweiGroup;
 import com.fs.system.oss.valdator.QcloudGroup;
 import com.fs.system.oss.valdator.QiniuGroup;
 import org.hibernate.validator.constraints.Range;
@@ -92,6 +93,25 @@ public class CloudStorageConfig implements Serializable
     @NotBlank(message = "所属地区不能为空", groups = QcloudGroup.class)
     private String qcloudRegion;
 
+
+
+    @NotBlank(message = "华为云BucketName不能为空", groups = HuaweiGroup.class)
+    private String huaweiBucketName;
+
+    @NotBlank(message = "华为云Endpoint不能为空", groups = HuaweiGroup.class)
+    private String huaweiEndpoint;
+
+    @NotBlank(message = "华为云AK不能为空", groups = HuaweiGroup.class)
+    private String huaweiAK;
+
+    @NotBlank(message = "华为云SK不能为空", groups = HuaweiGroup.class)
+    private String huaweiSK;
+
+    @NotBlank(message = "华为云绑定的域名不能为空", groups = HuaweiGroup.class)
+    @URL(message = "华为云绑定的域名格式不正确", groups = HuaweiGroup.class)
+    private String huaweiDomain;
+
+
     public static long getSerialVersionUID() {
         return serialVersionUID;
     }
@@ -239,4 +259,44 @@ public class CloudStorageConfig implements Serializable
     public void setQcloudRegion(String qcloudRegion) {
         this.qcloudRegion = qcloudRegion;
     }
+
+    public @NotBlank(message = "华为云BucketName不能为空", groups = HuaweiGroup.class) String getHuaweiBucketName() {
+        return huaweiBucketName;
+    }
+
+    public void setHuaweiBucketName(@NotBlank(message = "华为云BucketName不能为空", groups = HuaweiGroup.class) String huaweiBucketName) {
+        this.huaweiBucketName = huaweiBucketName;
+    }
+
+    public @NotBlank(message = "华为云Endpoint不能为空", groups = HuaweiGroup.class) String getHuaweiEndpoint() {
+        return huaweiEndpoint;
+    }
+
+    public void setHuaweiEndpoint(@NotBlank(message = "华为云Endpoint不能为空", groups = HuaweiGroup.class) String huaweiEndpoint) {
+        this.huaweiEndpoint = huaweiEndpoint;
+    }
+
+    public @NotBlank(message = "华为云AK不能为空", groups = HuaweiGroup.class) String getHuaweiAK() {
+        return huaweiAK;
+    }
+
+    public void setHuaweiAK(@NotBlank(message = "华为云AK不能为空", groups = HuaweiGroup.class) String huaweiAK) {
+        this.huaweiAK = huaweiAK;
+    }
+
+    public @NotBlank(message = "华为云SK不能为空", groups = HuaweiGroup.class) String getHuaweiSK() {
+        return huaweiSK;
+    }
+
+    public void setHuaweiSK(@NotBlank(message = "华为云SK不能为空", groups = HuaweiGroup.class) String huaweiSK) {
+        this.huaweiSK = huaweiSK;
+    }
+
+    public @NotBlank(message = "华为云绑定的域名不能为空", groups = HuaweiGroup.class) @URL(message = "华为云绑定的域名格式不正确", groups = HuaweiGroup.class) String getHuaweiDomain() {
+        return huaweiDomain;
+    }
+
+    public void setHuaweiDomain(@NotBlank(message = "华为云绑定的域名不能为空", groups = HuaweiGroup.class) @URL(message = "华为云绑定的域名格式不正确", groups = HuaweiGroup.class) String huaweiDomain) {
+        this.huaweiDomain = huaweiDomain;
+    }
 }

+ 103 - 0
fs-service-system/src/main/java/com/fs/system/oss/HuaweiCloudStorageService.java

@@ -0,0 +1,103 @@
+package com.fs.system.oss;
+
+import com.fs.common.exception.file.OssException;
+import com.obs.services.ObsClient;
+import com.obs.services.exception.ObsException;
+import com.obs.services.model.PutObjectRequest;
+import org.apache.commons.io.IOUtils;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.TimeZone;
+
+/**
+ * 腾讯云存储
+ */
+public class HuaweiCloudStorageService extends CloudStorageService
+{
+    private ObsClient client;
+
+    public HuaweiCloudStorageService(CloudStorageConfig config)
+    {
+        this.config = config;
+        // 初始化
+        init();
+    }
+
+    private void init()
+    {
+        client = new ObsClient(config.getHuaweiAK(), config.getHuaweiSK(), config.getHuaweiEndpoint());
+    }
+    public static String generateUploadFileName(String fileName) {
+        // 获取文件扩展名
+        String fileExtension = "";
+        int i = fileName.lastIndexOf('.');
+        if (i > 0) {
+            fileExtension = fileName.substring(i + 1);
+        }
+
+        // 获取当前时间戳
+        long currentTimeMillis = System.currentTimeMillis();
+
+        // 生成上传文件名
+        String uploadFileName = currentTimeMillis + "." + fileExtension;
+
+        // 获取当前日期
+        Date date = new Date();
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
+        dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
+        String uploadDay = dateFormat.format(date);
+
+        // 生成上传路径
+        String key = "fs/" + uploadDay + "/" + uploadFileName;
+
+        return key;
+    }
+    @Override
+    public String upload(byte[] data, String path)
+    {
+        String objKey = generateUploadFileName(path);
+        try {
+            // 文件上传
+            com.obs.services.model.PutObjectRequest request = new PutObjectRequest(config.getHuaweiBucketName(), objKey,new ByteArrayInputStream(data));
+            client.putObject(request);
+        } catch (ObsException e) {
+            throw new ObsException("文件上传失败," + e.getErrorMessage());
+        } catch (Exception e) {
+            System.out.println("上传失败");
+            // 其他异常信息打印
+            return "上传失败"+e.getMessage();
+        }
+        return config.getHuaweiDomain()+"/"+ objKey;
+
+    }
+
+    @Override
+    public String upload(InputStream inputStream, String path)
+    {
+        try
+        {
+            byte[] data = IOUtils.toByteArray(inputStream);
+            return this.upload(data, path);
+        }
+        catch (IOException e)
+        {
+            throw new OssException("上传文件失败");
+        }
+    }
+
+    @Override
+    public String uploadSuffix(byte[] data, String suffix)
+    {
+        return upload(data, getPath(config.getQcloudPrefix(), suffix));
+    }
+
+    @Override
+    public String uploadSuffix(InputStream inputStream, String suffix)
+    {
+        return upload(inputStream, getPath(config.getQcloudPrefix(), suffix));
+    }
+}

+ 3 - 0
fs-service-system/src/main/java/com/fs/system/oss/OSSFactory.java

@@ -32,6 +32,9 @@ public final class OSSFactory
         else if (config.getType() == CloudConstant.CloudService.QCLOUD.getValue())
         {
             return new QcloudCloudStorageService(config);
+        }else if (config.getType() == CloudConstant.CloudService.HUAWEI.getValue())
+        {
+            return new HuaweiCloudStorageService(config);
         }
         return null;
     }

+ 8 - 0
fs-service-system/src/main/java/com/fs/system/oss/valdator/HuaweiGroup.java

@@ -0,0 +1,8 @@
+package com.fs.system.oss.valdator;
+
+/**
+ * 华为
+ */
+public interface HuaweiGroup
+{
+}