diff --git a/pom.xml b/pom.xml
index 4c95a07..16004b1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -220,6 +220,12 @@
fontbox
2.0.20
+
+
+ com.aliyun.oss
+ aliyun-sdk-oss
+ 3.14.0
+
diff --git a/src/main/java/com/newyetai/component/file/service/storage/AliFileStorage.java b/src/main/java/com/newyetai/component/file/service/storage/AliFileStorage.java
new file mode 100644
index 0000000..e405466
--- /dev/null
+++ b/src/main/java/com/newyetai/component/file/service/storage/AliFileStorage.java
@@ -0,0 +1,123 @@
+package com.newyetai.component.file.service.storage;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import org.apache.catalina.connector.ClientAbortException;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+
+import com.aliyun.oss.ClientException;
+import com.aliyun.oss.OSS;
+import com.aliyun.oss.OSSClientBuilder;
+import com.aliyun.oss.OSSException;
+import com.aliyun.oss.model.OSSObject;
+import com.newyetai.common.constant.CommonConstants;
+import com.newyetai.common.exception.BusinessException;
+import com.newyetai.common.exception.DevopsException;
+import com.newyetai.common.exception.util.Assert;
+import com.newyetai.common.util.EnvironmentUtils;
+import com.newyetai.component.file.config.FileProperties;
+import com.newyetai.component.file.config.FileProperties.AliStorage;
+import com.newyetai.component.file.constant.FileStorageEnum;
+import com.newyetai.component.file.service.IFileStorage;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public class AliFileStorage implements IFileStorage {
+
+ private FileProperties fileProperties;
+
+ private OSS ossClient;
+
+ private String bucketName;
+
+ public AliFileStorage(FileProperties fileProperties) {
+ this.fileProperties = fileProperties;
+ AliStorage aliStorage = fileProperties.getStorage().getAli();
+ ossClient = new OSSClientBuilder().build(aliStorage.getEndpoint(), aliStorage.getAccessKeyId(),
+ aliStorage.getAccessKeySecret());
+ this.bucketName = String.join(CommonConstants.HYPHEN, aliStorage.getBucketName(), EnvironmentUtils.getProfile());
+ }
+
+ @Override
+ public void upload(InputStream is, String filePath) {
+ try {
+ ossClient.putObject(bucketName, dealPath(filePath), is);
+ } catch (OSSException oe) {
+ log.info("Caught an OSSException, which means your request made it to OSS, "
+ + "but was rejected with an error response for some reason.");
+ log.info("Error Message:" + oe.getErrorMessage());
+ log.info("Error Code:" + oe.getErrorCode());
+ log.info("Request ID:" + oe.getRequestId());
+ log.info("Host ID:" + oe.getHostId());
+ throw new DevopsException("oss请求异常" + oe.getMessage());
+ } catch (ClientException ce) {
+ log.info("Caught an ClientException, which means the client encountered "
+ + "a serious internal problem while trying to communicate with OSS, "
+ + "such as not being able to access the network.");
+ log.info("Error Message:" + ce.getMessage());
+ throw new DevopsException("oss客户端异常" + ce.getMessage());
+ }
+ }
+
+ @Override
+ public void download(String filePath, OutputStream os) {
+ try(InputStream is = download(filePath)) {
+ try {
+ IOUtils.copy(is, os);
+ } catch (ClientAbortException e) {
+ throw new BusinessException("下载客户端异常:" + e.getMessage());
+ }
+ } catch (IOException ie) {
+ log.info("Caught an IOException", ie);
+ throw new DevopsException("oss流处理异常" + ie.getMessage());
+ }
+ }
+
+ private String dealPath(String path) {
+ Assert.isTrue(StringUtils.isNotBlank(path), "文件地址不能为空");
+ String seperate = String.valueOf(File.separatorChar);
+ if (path.startsWith("/")) {
+ return path.substring(1);
+ }
+ if (!path.startsWith(seperate)) {
+ return path;
+ }
+ return path.substring(seperate.length());
+ }
+
+ @Override
+ public String getType() {
+ return FileStorageEnum.ALI_NAME;
+ }
+
+ @Override
+ public InputStream download(String filePath) {
+ try {
+ // 调用ossClient.getObject返回一个OSSObject实例,该实例包含文件内容及文件元信息。
+ OSSObject ossObject = ossClient.getObject(bucketName, dealPath(filePath));
+ // 调用ossObject.getObjectContent获取文件输入流,可读取此输入流获取其内容。
+ InputStream content = ossObject.getObjectContent();
+ return content;
+ } catch (OSSException oe) {
+ log.info("Caught an OSSException, which means your request made it to OSS, "
+ + "but was rejected with an error response for some reason.");
+ log.info("Error Message:" + oe.getErrorMessage());
+ log.info("Error Code:" + oe.getErrorCode());
+ log.info("Request ID:" + oe.getRequestId());
+ log.info("Host ID:" + oe.getHostId());
+ throw new DevopsException("oss请求异常" + oe.getMessage());
+ } catch (ClientException ce) {
+ log.info("Caught an ClientException, which means the client encountered "
+ + "a serious internal problem while trying to communicate with OSS, "
+ + "such as not being able to access the network.");
+ log.info("Error Message:" + ce.getMessage());
+ throw new DevopsException("oss客户端异常" + ce.getMessage());
+ }
+ }
+
+}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 3fc3138..50632ad 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -1,4 +1,5 @@
spring.application.name=alita-bjy-uygur
+spring.profiles.active=uat-uygur
##数据源
spring.datasource.url=jdbc:dm://139.159.237.199:5236?schema=BJY_UYGUR_JOB&useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&rewriteBatchedStatements=true&allowMultiQueries=true&useSSL=false
@@ -42,6 +43,13 @@ logging.pattern.file:%d{yyyy/MM/dd-HH:mm:ss} %X{traceId:-} [%thread] %-5level %l
file.upload-dir=/var/${spring.application.name}/upload
java.io.tmpdir=/var/${spring.application.name}/upload/tmpdir
+#文件存储配置
+file.storage.type=ali
+file.storage.ali.endpoint=https://oss-cn-shanghai.aliyuncs.com
+file.storage.ali.accessKeyId=LTAI5tMYmstNNcvsf67CWR5P
+file.storage.ali.accessKeySecret=JyRcBvT8jVC1dhP5ji85WDTmgEOvZW
+file.storage.ali.bucketName=newyetai
+
#发号器
#机器id:根据ip自己定义
code.snowflake.workid.192.168.31.234=23