diff --git a/adc-da-main/src/main/resources/application-dev.properties b/adc-da-main/src/main/resources/application-dev.properties
index 7898e80..b53670e 100644
--- a/adc-da-main/src/main/resources/application-dev.properties
+++ b/adc-da-main/src/main/resources/application-dev.properties
@@ -114,6 +114,8 @@ spring.redis.jedis.pool.max-wait=2000ms
spring.redis.database=6
+# 上传方式:阿里云:alioss 华为云:hwobs
+uploadType: hwobs
# ======= 阿里OSS配置 =========
aliyun.OSS.endpoint=https://oss-cn-hangzhou.aliyuncs.com
@@ -122,6 +124,13 @@ aliyun.OSS.accessKeySecret= mY6UvWv20Tg2R46ORe6uV5gL6TQloC
aliyun.OSS.bucketName=qqxexamplebucket
aliyun.OSS.fileMaxSize=10 #文件上传最大M数
+# ======= 华为OBS配置 =========
+huawei.OBS.endPoint=https://obs.cn-north-4.myhuaweicloud.com
+huawei.OBS.accessKey=EEMAGYTHP9KKPF18TZCL
+huawei.OBS.secretKey=3NmFNf1uX3EV1LbCEzgw6gDv0tZ6WAVwG37BGq1p
+huawei.OBS.bucketName=gcpa
+huawei.OBS.fileMaxSize=10 #文件上传最大M数
+
logging.level.com.adc: debug
diff --git a/adc-da-report/pom.xml b/adc-da-report/pom.xml
index 277a48d..acde4b8 100644
--- a/adc-da-report/pom.xml
+++ b/adc-da-report/pom.xml
@@ -19,6 +19,12 @@
aliyun-sdk-oss
3.10.2
+
+
+ com.huaweicloud
+ esdk-obs-java-bundle
+ [3.21.11,)
+
org.springframework.boot
spring-boot-starter-web
diff --git a/adc-da-report/src/main/java/com/adc/da/report/config/ObsConfig.java b/adc-da-report/src/main/java/com/adc/da/report/config/ObsConfig.java
new file mode 100644
index 0000000..dc87635
--- /dev/null
+++ b/adc-da-report/src/main/java/com/adc/da/report/config/ObsConfig.java
@@ -0,0 +1,31 @@
+package com.adc.da.report.config;
+
+import com.adc.da.report.util.ObsBootUtil;
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Data
+@Configuration
+@ConfigurationProperties(prefix = "huawei.obs")
+public class ObsConfig {
+ /**
+ * 访问密钥AK
+ */
+ private String accessKey;
+ /**
+ * 访问密钥SK
+ */
+ private String secretKey;
+ /**
+ * 终端节点
+ */
+ private String endPoint;
+ /**
+ * 桶
+ */
+ private String bucketName;
+
+}
diff --git a/adc-da-report/src/main/java/com/adc/da/report/controller/ReportManageConroller.java b/adc-da-report/src/main/java/com/adc/da/report/controller/ReportManageConroller.java
index 9442f8c..73a3be2 100644
--- a/adc-da-report/src/main/java/com/adc/da/report/controller/ReportManageConroller.java
+++ b/adc-da-report/src/main/java/com/adc/da/report/controller/ReportManageConroller.java
@@ -6,6 +6,7 @@ import com.adc.da.report.eo.ReportEntity;
import com.adc.da.report.service.IFileService;
import com.adc.da.report.service.IReportService;
import com.adc.da.report.util.OSSClientUtil;
+import com.adc.da.report.util.ObsBootUtil;
import com.adc.da.report.vo.ReportQueryVo;
import com.adc.da.report.vo.ReportVo;
import com.adc.da.util.http.ResponseMessage;
@@ -17,6 +18,8 @@ import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import javax.annotation.Resource;
+
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.*;
@@ -57,6 +60,12 @@ public class ReportManageConroller {
@Resource
private OSSClientUtil ossClientUtil;
+ @Autowired
+ private ObsBootUtil obsBootUtil;
+
+ @Value("${uploadType}")
+ private String uploadType;
+
/**
* 新增或编辑报告
@@ -173,8 +182,13 @@ public class ReportManageConroller {
fileName = fileName.substring(0, fileName.lastIndexOf("."))+date + num + "." + ext;
log.info("fileName>>" + fileName);
try{
- String result=ossClientUtil.uploadFile2OSS(file.getInputStream(),fileName);
-
+ String result="";
+ // 上传方式:阿里云:alioss 华为云:hwobs
+ if (uploadType.equals("hwobs")){
+ result = obsBootUtil.upload(file, fileName);
+ }else if (uploadType.equals("alioss")){
+ result = ossClientUtil.uploadFile2OSS(file.getInputStream(),fileName);
+ }
resultMap.put("key", date + num);
resultMap.put("value", path + "//" + fileName);
resultMap.put("name", realName);
@@ -284,7 +298,12 @@ public class ReportManageConroller {
response.setHeader("Content-Disposition", "attachment;filename=" + filename);
response.setContentType("application/x-download");
// File file = new File(uploadFile, entity.getSavePath());
- ossClientUtil.downloadFileFromOSS(entity.getSavePath(),response);
+ // 上传方式:阿里云:alioss 华为云:hwobs
+ if (uploadType.equals("hwobs")){
+ obsBootUtil.downFile(entity.getSavePath(), response);
+ }else if (uploadType.equals("alioss")){
+ ossClientUtil.downloadFileFromOSS(entity.getSavePath(),response);
+ }
} catch (Exception ex) {
log.info(ex.getMessage(),ex);
diff --git a/adc-da-report/src/main/java/com/adc/da/report/util/ObsBootUtil.java b/adc-da-report/src/main/java/com/adc/da/report/util/ObsBootUtil.java
new file mode 100644
index 0000000..9bd57d8
--- /dev/null
+++ b/adc-da-report/src/main/java/com/adc/da/report/util/ObsBootUtil.java
@@ -0,0 +1,120 @@
+package com.adc.da.report.util;
+
+import com.adc.da.login.util.CommonUtils;
+import com.adc.da.report.config.ObsConfig;
+import com.adc.da.util.exception.AdcDaBaseException;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.obs.services.ObsClient;
+import com.obs.services.exception.ObsException;
+import com.obs.services.model.*;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.FileUtils;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.PostConstruct;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.util.Objects;
+import java.util.logging.Logger;
+
+/**
+ * @Description: 华为云 obs 上传工具类(高依赖版)
+ * @Date: 2019/5/10
+ */
+@Slf4j
+@Component
+public class ObsBootUtil {
+
+ @Autowired
+ private ObsConfig obsConfig;
+ private static ObsConfig configProperties;
+ private static ObsClient obsClient;
+
+ @PostConstruct
+ public void init() {
+ configProperties = this.obsConfig;
+ obsClient = new ObsClient(configProperties.getAccessKey(), configProperties.getSecretKey(), configProperties.getEndPoint());
+ }
+ /**
+ * 上传文件至华为云 OBS
+ * @author YJZ
+ * @Date 2022/11/11 16:35
+ * @param file 文件
+ * @param fileName 文件名称 包括后缀名
+ * @return
+ */
+ public String upload(MultipartFile file, String fileName) {
+ obsClient = new ObsClient(configProperties.getAccessKey(), configProperties.getSecretKey(), configProperties.getEndPoint());
+ PutObjectResult result = null;
+ try {
+ InputStream inputStream = file.getInputStream();
+ // 判断桶是否存在
+ String bucketName = configProperties.getBucketName();
+ boolean exists = obsClient.headBucket(bucketName);
+ if(!exists){
+ // 若不存在,则创建桶
+ HeaderResponse response = obsClient.createBucket(bucketName);
+ log.info("创建桶成功" + response.getRequestId());
+ }
+ ObjectMetadata metadata = new ObjectMetadata();
+ metadata.setContentType(file.getContentType());
+ metadata.setContentLength((long) inputStream.available());
+ result = obsClient.putObject(bucketName, fileName, inputStream, metadata);
+ } catch (ObsException | IOException oe) {
+ throw new AdcDaBaseException("OBS上传失败");
+ } finally {
+ destroy(obsClient);
+ }
+ return result.getRequestId();
+ }
+
+ //下载文件
+ public void downFile(String objectKey, HttpServletResponse response) throws IOException {
+ obsClient = new ObsClient(configProperties.getAccessKey(), configProperties.getSecretKey(), configProperties.getEndPoint());
+ InputStream objectContent = null;
+ try {
+ ObsObject obsObject = obsClient.getObject(configProperties.getBucketName(), objectKey);
+ objectContent = obsObject.getObjectContent();
+ if (!Objects.isNull(objectContent)){
+ byte[] bt = new byte[1024 * 1024];
+ int len = 0;
+ while ((len = objectContent.read(bt)) != -1) {
+ response.getOutputStream().write(bt, 0, len);
+ }
+ }
+ }catch (ObsException | IOException oe){
+ throw new AdcDaBaseException("OBS下载文件失败");
+ }finally {
+ // 数据读取完成后,获取的流必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。
+ objectContent.close();
+ response.getOutputStream().close();
+ }
+
+ }
+
+ //文件删除
+ public void deleteFile(String objectKey) {
+ obsClient.deleteObject(configProperties.getBucketName(), objectKey);
+ }
+
+ /**
+ * 销毁OBS客户端实例
+ * @author LQT
+ * @Date 2022/10/25 13:40
+ * @param obsClient
+ * @return void
+ */
+ public void destroy(ObsClient obsClient){
+ try {
+ obsClient.close();
+ } catch (ObsException e) {
+ log.error("obs执行失败", e);
+ } catch (Exception e) {
+ log.error("执行失败", e);
+ }
+ }
+
+}