yangdamao 6 kuukautta sitten
vanhempi
commit
091fe17ef0
23 muutettua tiedostoa jossa 589 lisäystä ja 12 poistoa
  1. 43 0
      zhichen-admin-saas/src/main/java/com/zhichen/controller/cos/CosController.java
  2. 8 0
      zhichen-admin-saas/src/main/resources/application-dev.yml
  3. 8 0
      zhichen-admin-saas/src/main/resources/application-pre.yml
  4. 9 0
      zhichen-admin-saas/src/main/resources/application-prod.yml
  5. 50 0
      zhichen-admin/src/main/java/com/zhichen/controller/cos/CosController.java
  6. 9 0
      zhichen-admin/src/main/resources/application-dev.yml
  7. 9 0
      zhichen-admin/src/main/resources/application-pre.yml
  8. 8 0
      zhichen-admin/src/main/resources/application-prod.yml
  9. 43 0
      zhichen-api/src/main/java/com/zhichen/controller/cos/CosController.java
  10. 8 0
      zhichen-api/src/main/resources/application-dev.yml
  11. 8 0
      zhichen-api/src/main/resources/application-pre.yml
  12. 8 12
      zhichen-api/src/main/resources/application-prod.yml
  13. 7 0
      zhichen-common/pom.xml
  14. 22 0
      zhichen-common/src/main/java/com/zhichen/common/utils/file/FileUtils.java
  15. 37 0
      zhichen-framework/src/main/java/com/zhichen/framework/config/CosConfig.java
  16. 1 0
      zhichen-framework/src/main/java/com/zhichen/framework/config/SecurityConfig.java
  17. 30 0
      zhichen-system/src/main/java/com/zhichen/modules/txcos/bo/FileHandleBo.java
  18. 25 0
      zhichen-system/src/main/java/com/zhichen/modules/txcos/bo/OssCallbackParam.java
  19. 35 0
      zhichen-system/src/main/java/com/zhichen/modules/txcos/bo/OssRequest.java
  20. 11 0
      zhichen-system/src/main/java/com/zhichen/modules/txcos/service/CosService.java
  21. 175 0
      zhichen-system/src/main/java/com/zhichen/modules/txcos/service/impl/CosServiceImpl.java
  22. 14 0
      zhichen-system/src/main/java/com/zhichen/modules/txcos/vo/FileBean.java
  23. 21 0
      zhichen-system/src/main/java/com/zhichen/modules/txcos/vo/ResultBean.java

+ 43 - 0
zhichen-admin-saas/src/main/java/com/zhichen/controller/cos/CosController.java

@@ -0,0 +1,43 @@
+package com.zhichen.controller.cos;
+
+
+import com.zhichen.common.core.controller.BaseController;
+import com.zhichen.common.core.domain.AjaxResult;
+import com.zhichen.modules.alioss.bo.OssRequest;
+import com.zhichen.modules.txcos.service.CosService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 阿里OSS
+ *
+ * @author change
+ * @date 2021-05-17
+ */
+@Api(value = "腾讯COS上传文件控制器", tags = {"腾讯COS上传文件"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/tengxun/cos")
+public class CosController extends BaseController {
+
+    private static Logger log = LoggerFactory.getLogger(CosController.class);
+
+    private final CosService cosService;
+
+    /**
+     * upload上传文件
+     */
+    @ApiOperation("上传file图片")
+    @PostMapping("/upload")
+    public AjaxResult<String> upload(OssRequest file) throws Exception {
+        String result = cosService.upload(file);
+        return AjaxResult.success("返回图片路径",result);
+    }
+}

+ 8 - 0
zhichen-admin-saas/src/main/resources/application-dev.yml

@@ -68,6 +68,14 @@ spring:
                 max-active: 8
                 # #连接池最大阻塞等待时间(使用负值表示没有限制)
                 max-wait: -1ms
+tengxun:
+    cos:
+        endpoint: https://file.gdzckj.net # oss对外服务的访问域名
+        accessKeyId: AKIDjJfIitpWyB9sMccPyJTQ82mHXZMtAD1Z  # 访问身份验证中用到用户标识
+        accessKeySecret: MTZQ1OXUDgtsc6KJ1e8ORGrGVXKtEfz5 # 用户用于加密签名字符串和oss用来验证签名字符串的密钥
+        bucketName: zhichen-prod-1346729515 # oss的存储空间
+        dir:
+            prefix: cos/images/ # 上传文件夹路径前缀 ` `
 aliyun:
     oss:
         endpoint: https://file-dev.xyyxt.net # oss对外服务的访问域名

+ 8 - 0
zhichen-admin-saas/src/main/resources/application-pre.yml

@@ -68,6 +68,14 @@ spring:
                 max-active: 8
                 # #连接池最大阻塞等待时间(使用负值表示没有限制)
                 max-wait: -1ms
+tengxun:
+    cos:
+        endpoint: https://file.gdzckj.net # oss对外服务的访问域名
+        accessKeyId: AKIDjJfIitpWyB9sMccPyJTQ82mHXZMtAD1Z  # 访问身份验证中用到用户标识
+        accessKeySecret: MTZQ1OXUDgtsc6KJ1e8ORGrGVXKtEfz5 # 用户用于加密签名字符串和oss用来验证签名字符串的密钥
+        bucketName: zhichen-prod-1346729515 # oss的存储空间
+        dir:
+            prefix: cos/images/ # 上传文件夹路径前缀 `
 aliyun:
     oss:
         endpoint: https://file.xyyxt.net # oss对外服务的访问域名

+ 9 - 0
zhichen-admin-saas/src/main/resources/application-prod.yml

@@ -68,6 +68,15 @@ spring:
                 max-active: 8
                 # #连接池最大阻塞等待时间(使用负值表示没有限制)
                 max-wait: -1ms
+
+tengxun:
+    cos:
+        endpoint: https://file.gdzckj.net # oss对外服务的访问域名
+        accessKeyId: AKIDjJfIitpWyB9sMccPyJTQ82mHXZMtAD1Z  # 访问身份验证中用到用户标识
+        accessKeySecret: MTZQ1OXUDgtsc6KJ1e8ORGrGVXKtEfz5 # 用户用于加密签名字符串和oss用来验证签名字符串的密钥
+        bucketName: zhichen-prod-1346729515 # oss的存储空间
+        dir:
+            prefix: cos/images/ # 上传文件夹路径前缀 `
 aliyun:
     oss:
         endpoint: https://file.xyyxt.net # oss对外服务的访问域名

+ 50 - 0
zhichen-admin/src/main/java/com/zhichen/controller/cos/CosController.java

@@ -0,0 +1,50 @@
+package com.zhichen.controller.cos;
+
+
+import com.zhichen.common.core.controller.BaseController;
+import com.zhichen.common.core.domain.AjaxResult;
+import com.zhichen.modules.alioss.bo.OssRequest;
+import com.zhichen.modules.txcos.service.CosService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 阿里OSS
+ *
+ * @author change
+ * @date 2021-05-17
+ */
+@Api(value = "腾讯COS上传文件控制器", tags = {"腾讯COS上传文件"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/tengxun/cos")
+public class CosController extends BaseController {
+
+    private static Logger log = LoggerFactory.getLogger(CosController.class);
+
+    private final CosService cosService;
+
+    /**
+     * upload上传文件
+     */
+    @ApiOperation("上传file图片")
+    @PostMapping("/upload")
+    public AjaxResult<String> upload(OssRequest file) throws Exception {
+        String result = cosService.upload(file);
+        return AjaxResult.success("返回图片路径",result);
+    }
+
+    @ApiOperation("上传file图片带路径")
+    @PostMapping("/uploadPath")
+    public AjaxResult<String> uploadPath(OssRequest file) throws Exception {
+        String result = cosService.uploadWithPath(file,file.getPath());
+        return AjaxResult.success("返回图片路径",result);
+    }
+}

+ 9 - 0
zhichen-admin/src/main/resources/application-dev.yml

@@ -68,6 +68,15 @@ spring:
                 max-active: 8
                 # #连接池最大阻塞等待时间(使用负值表示没有限制)
                 max-wait: -1ms
+
+tengxun:
+    cos:
+        endpoint: https://file.gdzckj.net # oss对外服务的访问域名
+        accessKeyId: AKIDjJfIitpWyB9sMccPyJTQ82mHXZMtAD1Z  # 访问身份验证中用到用户标识
+        accessKeySecret: MTZQ1OXUDgtsc6KJ1e8ORGrGVXKtEfz5 # 用户用于加密签名字符串和oss用来验证签名字符串的密钥
+        bucketName: zhichen-prod-1346729515 # oss的存储空间
+        dir:
+            prefix: cos/images/ # 上传文件夹路径前缀 ` `
 aliyun:
     oss:
         endpoint: https://file-dev.xyyxt.net # oss对外服务的访问域名

+ 9 - 0
zhichen-admin/src/main/resources/application-pre.yml

@@ -81,6 +81,15 @@ aliyun:
         dir:
             prefix: oss/images/ # 上传文件夹路径前缀 ` `
 
+tengxun:
+    cos:
+        endpoint: https://file.gdzckj.net # oss对外服务的访问域名
+        accessKeyId: AKIDfDaKgROLSM4DVHRPAh072jDUbWEi1AGB  # 访问身份验证中用到用户标识
+        accessKeySecret: oS3hDXiR2PYUCnQo0yhDVaR4UgeOvEKB # 用户用于加密签名字符串和oss用来验证签名字符串的密钥
+        bucketName: zhichen-prod-1346729515 # oss的存储空间
+        dir:
+            prefix: cos/images/ # 上传文件夹路径前缀 ` `
+
 poliv:
     token:
         userid: d5f6d309fe

+ 8 - 0
zhichen-admin/src/main/resources/application-prod.yml

@@ -68,6 +68,14 @@ spring:
                 max-active: 8
                 # #连接池最大阻塞等待时间(使用负值表示没有限制)
                 max-wait: -1ms
+tengxun:
+    cos:
+        endpoint: https://file.gdzckj.net # oss对外服务的访问域名
+        accessKeyId: AKIDjJfIitpWyB9sMccPyJTQ82mHXZMtAD1Z  # 访问身份验证中用到用户标识
+        accessKeySecret: MTZQ1OXUDgtsc6KJ1e8ORGrGVXKtEfz5 # 用户用于加密签名字符串和oss用来验证签名字符串的密钥
+        bucketName: zhichen-prod-1346729515 # oss的存储空间
+        dir:
+            prefix: cos/images/ # 上传文件夹路径前缀 ` `
 aliyun:
     oss:
         endpoint: https://file.xyyxt.net # oss对外服务的访问域名

+ 43 - 0
zhichen-api/src/main/java/com/zhichen/controller/cos/CosController.java

@@ -0,0 +1,43 @@
+package com.zhichen.controller.cos;
+
+
+import com.zhichen.common.core.controller.BaseController;
+import com.zhichen.common.core.domain.AjaxResult;
+import com.zhichen.modules.alioss.bo.OssRequest;
+import com.zhichen.modules.txcos.service.CosService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 阿里OSS
+ *
+ * @author change
+ * @date 2021-05-17
+ */
+@Api(value = "腾讯COS上传文件控制器", tags = {"腾讯COS上传文件"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/tengxun/cos")
+public class CosController extends BaseController {
+
+    private static Logger log = LoggerFactory.getLogger(CosController.class);
+
+    private final CosService cosService;
+
+    /**
+     * upload上传文件
+     */
+    @ApiOperation("上传file图片")
+    @PostMapping("/upload")
+    public AjaxResult<String> upload(OssRequest file) throws Exception {
+        String result = cosService.upload(file);
+        return AjaxResult.success("返回图片路径",result);
+    }
+}

+ 8 - 0
zhichen-api/src/main/resources/application-dev.yml

@@ -68,6 +68,14 @@ spring:
                 max-active: 8
                 # #连接池最大阻塞等待时间(使用负值表示没有限制)
                 max-wait: -1ms
+tengxun:
+    cos:
+        endpoint: https://file.gdzckj.net # oss对外服务的访问域名
+        accessKeyId: AKIDjJfIitpWyB9sMccPyJTQ82mHXZMtAD1Z  # 访问身份验证中用到用户标识
+        accessKeySecret: MTZQ1OXUDgtsc6KJ1e8ORGrGVXKtEfz5 # 用户用于加密签名字符串和oss用来验证签名字符串的密钥
+        bucketName: zhichen-prod-1346729515 # oss的存储空间
+        dir:
+            prefix: cos/images/ # 上传文件夹路径前缀 `
 aliyun:
     oss:
         endpoint: https://file-dev.xyyxt.net # oss对外服务的访问域名

+ 8 - 0
zhichen-api/src/main/resources/application-pre.yml

@@ -68,6 +68,14 @@ spring:
                 max-active: 8
                 # #连接池最大阻塞等待时间(使用负值表示没有限制)
                 max-wait: -1ms
+tengxun:
+    cos:
+        endpoint: https://file.gdzckj.net # oss对外服务的访问域名
+        accessKeyId: AKIDjJfIitpWyB9sMccPyJTQ82mHXZMtAD1Z  # 访问身份验证中用到用户标识
+        accessKeySecret: MTZQ1OXUDgtsc6KJ1e8ORGrGVXKtEfz5 # 用户用于加密签名字符串和oss用来验证签名字符串的密钥
+        bucketName: zhichen-prod-1346729515 # oss的存储空间
+        dir:
+            prefix: cos/images/ # 上传文件夹路径前缀 `
 aliyun:
     oss:
         endpoint: https://file.xyyxt.net # oss对外服务的访问域名

+ 8 - 12
zhichen-api/src/main/resources/application-prod.yml

@@ -68,18 +68,14 @@ spring:
                 max-active: 8
                 # #连接池最大阻塞等待时间(使用负值表示没有限制)
                 max-wait: -1ms
-#aliyun:
-#    oss:
-#        endpoint: https://file.xyyxt.net # oss对外服务的访问域名
-#        accessKeyId: LTAI5tDbpYmpifZYNX8S3kt1  # 访问身份验证中用到用户标识
-#        accessKeySecret: jCdSPAj58ZXOLsWpV8bCgNOYrEK0de # 用户用于加密签名字符串和oss用来验证签名字符串的密钥
-#        bucketName: zhichen-prod # oss的存储空间
-#        policy:
-#            expire: 30 # 签名有效期(S)
-#        maxSize: 100 # 上传文件大小(M)
-#        callback: https://cloud.xyyxt.net/aliyun/oss/callback # 文件上传成功后的回调地址
-#        dir:
-#            prefix: oss/images/ # 上传文件夹路径前缀 `
+tengxun:
+    cos:
+        endpoint: https://file.gdzckj.net # oss对外服务的访问域名
+        accessKeyId: AKIDjJfIitpWyB9sMccPyJTQ82mHXZMtAD1Z  # 访问身份验证中用到用户标识
+        accessKeySecret: MTZQ1OXUDgtsc6KJ1e8ORGrGVXKtEfz5 # 用户用于加密签名字符串和oss用来验证签名字符串的密钥
+        bucketName: zhichen-prod-1346729515 # oss的存储空间
+        dir:
+            prefix: cos/images/ # 上传文件夹路径前缀 `
 aliyun:
     oss:
         endpoint: https://file.xyyxt.net # oss对外服务的访问域名

+ 7 - 0
zhichen-common/pom.xml

@@ -111,6 +111,13 @@
             <version>2.0.7</version>
         </dependency>
 
+        <!-- COS 相关依赖 -->
+        <dependency>
+            <groupId>com.qcloud</groupId>
+            <artifactId>cos_api</artifactId>
+            <version>5.6.54</version>
+        </dependency>
+
         <!-- SpringBoot Websocket -->
         <dependency>
             <groupId>org.springframework.boot</groupId>

+ 22 - 0
zhichen-common/src/main/java/com/zhichen/common/utils/file/FileUtils.java

@@ -566,4 +566,26 @@ public class FileUtils extends org.apache.commons.io.FileUtils
         }
     }
 
+
+
+    public static File convertMultipartFileToFile(MultipartFile multipartFile) throws IOException {
+        // 创建一个临时文件
+        File file = File.createTempFile("temp", null);
+
+        // 获取 MultipartFile 的输入流
+        try (InputStream inputStream = multipartFile.getInputStream();
+             FileOutputStream outputStream = new FileOutputStream(file)) {
+
+            // 将输入流的内容写入到输出流中
+            byte[] buffer = new byte[1024];
+            int bytesRead;
+            while ((bytesRead = inputStream.read(buffer)) != -1) {
+                outputStream.write(buffer, 0, bytesRead);
+            }
+        }
+
+        // 返回转换后的 File 对象
+        return file;
+    }
+
 }

+ 37 - 0
zhichen-framework/src/main/java/com/zhichen/framework/config/CosConfig.java

@@ -0,0 +1,37 @@
+package com.zhichen.framework.config;
+
+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.region.Region;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class CosConfig {
+    @Value("${tengxun.cos.endpoint}")
+    private String ALIYUN_OSS_ENDPOINT;
+    @Value("${tengxun.cos.accessKeyId}")
+    private String ALIYUN_OSS_ACCESSKEYID;
+    @Value("${tengxun.cos.accessKeySecret}")
+    private String ALIYUN_OSS_ACCESSKEYSECRET;
+
+    @Bean
+    public COSClient cosClient(){
+        // 1. 初始化用户身份信息(secretId, secretKey)
+        String secretId = ALIYUN_OSS_ACCESSKEYID;
+        String secretKey = ALIYUN_OSS_ACCESSKEYSECRET;
+        COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
+
+        // 2. 设置bucket的区域, COS地域的简称请参照 https://cloud.tencent.com/document/product/436/6224
+        Region region = new Region("ap-guangzhou"); // 例如:北京区域
+
+        // 3. 生成cos客户端
+        ClientConfig clientConfig = new ClientConfig(region);
+        COSClient cosClient = new COSClient(cred, clientConfig);
+
+        return cosClient;
+    }
+}

+ 1 - 0
zhichen-framework/src/main/java/com/zhichen/framework/config/SecurityConfig.java

@@ -129,6 +129,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                         "/**/*.js"
                 ).permitAll()
                 .antMatchers("/app/common/**").anonymous() //小程序非验证接口
+                .antMatchers("/tengxun/cos/**").anonymous()
                 .antMatchers("/sys/common/**").anonymous()
                 .antMatchers("/refreshToken/**").anonymous()
                 .antMatchers("/v1/test/**").anonymous()

+ 30 - 0
zhichen-system/src/main/java/com/zhichen/modules/txcos/bo/FileHandleBo.java

@@ -0,0 +1,30 @@
+package com.zhichen.modules.txcos.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2023年04月17日 9:33
+ */
+@Data
+public class FileHandleBo implements Serializable {
+
+    @ApiModelProperty("总片数")
+    private Integer shardCount;
+
+    @ApiModelProperty("序号")
+    private Integer index;
+
+    @ApiModelProperty("文件名称")
+    private String name;
+
+    @ApiModelProperty("文件标识")
+    private String fileSign;
+
+    @ApiModelProperty("完整文件的MD5值")
+    private String fileMd5;
+
+}

+ 25 - 0
zhichen-system/src/main/java/com/zhichen/modules/txcos/bo/OssCallbackParam.java

@@ -0,0 +1,25 @@
+package com.zhichen.modules.txcos.bo;
+
+import lombok.Data;
+
+/**
+ * oss上传成功后的回调参数
+ */
+@Data
+public class OssCallbackParam {
+    /**
+     *
+        请求的回调地址
+     */
+    private String callbackUrl;
+    /**
+     *
+        回调是传入request中的参数
+     */
+    private String callbackBody;
+    /**
+        回调时传入参数的格式,比如表单提交形式
+    */
+    private String callbackBodyType;
+
+}

+ 35 - 0
zhichen-system/src/main/java/com/zhichen/modules/txcos/bo/OssRequest.java

@@ -0,0 +1,35 @@
+package com.zhichen.modules.txcos.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author change
+ * @date 2021年06月10日 9:07
+ */
+@Data
+@ApiModel("传图片标识")
+public class OssRequest{
+
+    /** 上传图片标识 */
+    @ApiModelProperty(value = "上传图片标识 0头像 1身份证 2题库 3指南指引图片 4广告图片 5身份证或学信网图片 6文件excel,word,zip等 10文件zip",required = true)
+    @NotNull(message = "上传图片标识不能为空")
+    private Integer ImageStatus;
+
+    /** 上传图片 */
+    @ApiModelProperty("MultipartFile上传文件")
+    private MultipartFile file;
+
+    @ApiModelProperty("用户ID")
+    private Long userId;
+
+    @ApiModelProperty("班级ID")
+    private Long gradeId;
+
+    @ApiModelProperty("图片路径")
+    private String path;
+}

+ 11 - 0
zhichen-system/src/main/java/com/zhichen/modules/txcos/service/CosService.java

@@ -0,0 +1,11 @@
+package com.zhichen.modules.txcos.service;
+
+
+import com.zhichen.modules.alioss.bo.OssRequest;
+
+public interface CosService {
+
+    String upload(OssRequest file) throws Exception;
+
+    String uploadWithPath(OssRequest file, String path)throws Exception;
+}

+ 175 - 0
zhichen-system/src/main/java/com/zhichen/modules/txcos/service/impl/CosServiceImpl.java

@@ -0,0 +1,175 @@
+package com.zhichen.modules.txcos.service.impl;
+
+import cn.hutool.core.lang.Validator;
+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.model.ObjectMetadata;
+import com.qcloud.cos.model.PutObjectRequest;
+import com.qcloud.cos.region.Region;
+import com.zhichen.modules.alioss.bo.OssRequest;
+import com.zhichen.modules.txcos.service.CosService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.io.InputStream;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Random;
+
+@Service
+public class CosServiceImpl implements CosService {
+    private static final Logger LOGGER = LoggerFactory.getLogger(CosServiceImpl.class);
+
+    @Value("${tengxun.cos.dir.prefix}")
+    private String TENGXUN_COS_DIR_PREFIX;
+
+    @Value("${tengxun.cos.bucketName}")
+    private String TENGXUN_COS_BUCKET_NAME;
+
+    @Value("${tengxun.cos.accessKeyId}")
+    private String TENGXUN_COS_ACCESSKEYID;
+    @Value("${tengxun.cos.accessKeySecret}")
+    private String TENGXUN_COS_ACCESSKEYSECRET;
+
+
+    @Override
+    public String upload(OssRequest file) throws Exception{
+        // 初始化COS客户端
+        COSClient cosClient = initCOSClient();
+        //获取上传文件输入流
+        InputStream inputStream = file.getFile().getInputStream();
+        String originalFilename = file.getFile().getOriginalFilename();
+        String suffix = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
+
+        String fileName = TENGXUN_COS_DIR_PREFIX + generateRandomFilename(file) + "." + suffix;
+
+        // 指定要上传的文件
+        String bucketName = TENGXUN_COS_BUCKET_NAME;
+        String key =fileName; // 对象键,即上传到COS后的文件路径
+        ObjectMetadata metadata = new ObjectMetadata();
+        metadata.setContentType("image/jpeg"); // 设置 Content-Type
+        // 上传文件
+        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, inputStream,metadata);
+        cosClient.putObject(putObjectRequest);
+
+        // 关闭客户端
+        cosClient.shutdown();
+        return key;
+    }
+
+    @Override
+    public String uploadWithPath(OssRequest file, String path)throws Exception {
+        // 初始化COS客户端
+        COSClient cosClient = initCOSClient();
+        //获取上传文件输入流
+        InputStream inputStream = file.getFile().getInputStream();
+
+        // 指定要上传的文件
+        String bucketName = TENGXUN_COS_BUCKET_NAME;
+        String key =path; // 对象键,即上传到COS后的文件路径
+        ObjectMetadata metadata = new ObjectMetadata();
+        metadata.setContentType("image/jpeg"); // 设置 Content-Type
+        // 上传文件
+        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, inputStream,metadata);
+        cosClient.putObject(putObjectRequest);
+
+        // 关闭客户端
+        cosClient.shutdown();
+        return key;
+    }
+
+    private COSClient initCOSClient() {
+        // 1. 初始化用户身份信息(secretId, secretKey)
+        String secretId = TENGXUN_COS_ACCESSKEYID;
+        String secretKey = TENGXUN_COS_ACCESSKEYSECRET;
+        COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
+
+        // 2. 设置bucket的区域, COS地域的简称请参照 https://cloud.tencent.com/document/product/436/6224
+        Region region = new Region("ap-guangzhou"); // 例如:北京区域
+
+        // 3. 生成cos客户端
+        ClientConfig clientConfig = new ClientConfig(region);
+        COSClient cosClient = new COSClient(cred, clientConfig);
+
+        return cosClient;
+    }
+
+    //生成存储文件名
+    public String generateRandomFilename(OssRequest ossRequest) {
+        String prefixName = "";
+        if (Validator.isNotEmpty(ossRequest.getUserId()) && ossRequest.getUserId().longValue() > 0) {
+            prefixName = prefixName + ossRequest.getUserId();
+        }
+        if (Validator.isNotEmpty(ossRequest.getGradeId()) && ossRequest.getGradeId().longValue() > 0) {
+            prefixName = prefixName + "/" + ossRequest.getGradeId();
+        }
+        String RandomFilename = "";
+        //生成随机数
+        Random rand = new Random();
+        int random = rand.nextInt();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
+        Calendar calCurrent = Calendar.getInstance();
+        int intDay = calCurrent.get(Calendar.DATE);
+        int intMonth = calCurrent.get(Calendar.MONTH) + 1;
+        int intYear = calCurrent.get(Calendar.YEAR);
+        String now = String.valueOf(System.currentTimeMillis());
+
+        RandomFilename = now + String.valueOf(random > 0 ? random : (-1) * random);
+        switch (ossRequest.getImageStatus()) {
+            case 0:
+                RandomFilename = "avatar" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()))) + "/" + now;
+                break;
+            case 1:
+                RandomFilename = "IDNumber" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()))) + "/" + now;
+                break;
+            case 2:
+                RandomFilename = "QuestionBank" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()))) + "/" + now;
+                break;
+            case 3:
+                RandomFilename = "guide" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()))) + "/" + now;
+                break;
+            case 4:
+                RandomFilename = "advertising" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()))) + "/" + now;
+                break;
+            case 5:
+                RandomFilename = "IDCard" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()))) + "/" + now;
+                break;
+            case 6:
+                RandomFilename = "file" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()))) + "/" + now;
+                break;
+            case 7:
+                RandomFilename = "certificate" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()))) + "/" + now;
+                break;
+            case 8:
+                RandomFilename = "question" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()))) + "/" + now+"img";
+                break;
+            case 9:
+                RandomFilename = "wisdom" + "/" + prefixName + (Validator.isNotEmpty(prefixName) ? "" : (sdf.format(new Date()))) + "/" + now+ String.valueOf(random > 0 ? random : (-1) * random);
+                break;
+            case 10:
+                RandomFilename = "file" + "/" +(sdf.format(new Date())) + "/" + now + ".zip";
+                break;
+            case 11:
+                RandomFilename = "file/pdf/" +(sdf.format(new Date())) + "/" + now + ".pdf";
+                break;
+            case 12:
+                String filename = ossRequest.getFile().getOriginalFilename();
+                RandomFilename = "file/dangan/upload/"+ filename.substring(0, filename.lastIndexOf("."));
+                break;
+            case 13:
+                String filename2 = ossRequest.getFile().getOriginalFilename();
+                RandomFilename = "tupain/"+ filename2.substring(0, filename2.lastIndexOf("."));
+                break;
+            case 14:
+                RandomFilename = "tupain/"+ now;
+                break;
+        }
+
+        return RandomFilename;
+    }
+}

+ 14 - 0
zhichen-system/src/main/java/com/zhichen/modules/txcos/vo/FileBean.java

@@ -0,0 +1,14 @@
+package com.zhichen.modules.txcos.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+@Data
+@ApiModel("【oss】视图对象")
+public class FileBean {
+
+    private String path;
+
+    private String fileName;
+
+}

+ 21 - 0
zhichen-system/src/main/java/com/zhichen/modules/txcos/vo/ResultBean.java

@@ -0,0 +1,21 @@
+package com.zhichen.modules.txcos.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+@Data
+@ApiModel("【oss】视图对象")
+public class ResultBean {
+
+
+    private Object resultContent;
+
+
+
+    public ResultBean(Object resultContent){
+        this.resultContent = resultContent;
+    }
+
+
+
+}