Browse Source

Merge branch 'master' into lingshanjiedao_master

master
wxz 3 years ago
parent
commit
7ac6e84353
  1. 6
      epmet-module/epmet-oss/epmet-oss-client/src/main/java/com/epmet/enums/OssTypeEnum.java
  2. 6
      epmet-module/epmet-oss/epmet-oss-server/pom.xml
  3. 39
      epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/CloudStorageConfig.java
  4. 106
      epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/MinioStorageService.java
  5. 2
      epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/OssFactory.java

6
epmet-module/epmet-oss/epmet-oss-client/src/main/java/com/epmet/enums/OssTypeEnum.java

@ -34,7 +34,11 @@ public enum OssTypeEnum {
/**
* 本地
*/
LOCAL(5);
LOCAL(5),
/**
* minio
*/
MINIO(6);
private int value;

6
epmet-module/epmet-oss/epmet-oss-server/pom.xml

@ -90,6 +90,12 @@
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>
<!--minio-->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.4.2</version>
</dependency>
</dependencies>
<build>

39
epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/CloudStorageConfig.java

@ -11,9 +11,11 @@ package com.epmet.cloud;
import com.epmet.commons.tools.validator.group.AliyunGroup;
import com.epmet.commons.tools.validator.group.QcloudGroup;
import com.epmet.commons.tools.validator.group.QiniuGroup;
import com.epmet.constants.PrivacyType;
import com.epmet.validator.group.FastDFSGroup;
import com.epmet.validator.group.LocalGroup;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import org.hibernate.validator.constraints.Range;
import org.hibernate.validator.constraints.URL;
@ -101,6 +103,9 @@ public class CloudStorageConfig implements Serializable {
private String localPath;
private AliyunCloudStorageConfig aliyun;
private MinioStorageConfig minio;
/**
* 阿里云存储配置
*/
@ -110,6 +115,20 @@ public class CloudStorageConfig implements Serializable {
private AliyunCloudStorageConfigProps external;
}
@Data
public static class MinioStorageConfig {
private MinioStorageConfigProps internal;
private MinioStorageConfigProps external;
public MinioStorageConfigProps getConfigByPrivacy(String privacy) {
if (StringUtils.isNotBlank(privacy) && PrivacyType.INTERNAL.equals(privacy)) {
return internal;
} else {
return external;
}
}
}
/**
* 阿里云存储配置属性
*/
@ -134,4 +153,24 @@ public class CloudStorageConfig implements Serializable {
private String aliyunBucketName;
}
/**
* minio存储配置属性
*/
@Data
public static class MinioStorageConfigProps {
/**
* 外部访问域名用于用户直接访问minio服务
*/
private String minioExternalDomain;
/**
* 内部访问域名用于服务集群内部使用
*/
private String minioInternalDomain;
private String minioEndPoint;
private String minioAccessKey;
private String minioSecretKey;
private String minioPrefix;
private String minioBucketName;
}
}

106
epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/MinioStorageService.java

@ -0,0 +1,106 @@
package com.epmet.cloud;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.EpmetException;
import com.epmet.commons.tools.exception.ExceptionUtils;
import io.minio.MinioClient;
import io.minio.ObjectWriteResponse;
import io.minio.PutObjectArgs;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.http.MediaTypeFactory;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Paths;
/**
* minio 文件服务
*/
@Slf4j
public class MinioStorageService extends AbstractCloudStorageService {
private MinioClient minioClient;
public MinioStorageService(CloudStorageConfig config) {
this.config = config;
CloudStorageConfig.MinioStorageConfigProps props = config.getMinio().getConfigByPrivacy(null);
log.info("Minio客户端连接所用的域名:{}", props.getMinioInternalDomain());
/**
* minio和服务在同一个局域网则可以使用内网域名上传速度更快更稳定
*/
minioClient = MinioClient.builder()
.endpoint(props.getMinioInternalDomain()) // 保证和nginx的proxy_set_header Host 一致
.credentials(props.getMinioAccessKey(), props.getMinioSecretKey())
.build();
}
@Override
public String getOssDomain(String privacy) {
return this.config.getMinio().getConfigByPrivacy(privacy).getMinioExternalDomain();
}
@Override
public String getOssPrefix(String privacy) {
return this.config.getMinio().getConfigByPrivacy(privacy).getMinioPrefix();
}
@Override
public String upload(byte[] data, String path, String privacyType) {
return upload(new ByteArrayInputStream(data), path, privacyType);
}
@Override
public String uploadSuffix(byte[] data, String suffix, String privacyType) {
return uploadSuffix(new ByteArrayInputStream(data), suffix, privacyType);
}
/**
* 此处bucket已经做为path
* @param inputStream 字节流
* @param path 文件路径包含文件名
* @param privacyType
* @return
*/
@Override
public String upload(InputStream inputStream, String path, String privacyType) {
CloudStorageConfig.MinioStorageConfigProps props = this.config.getMinio().getConfigByPrivacy(privacyType);
String contentType = MediaTypeFactory.getMediaType(path).orElse(MediaType.APPLICATION_OCTET_STREAM).toString();
try {
ObjectWriteResponse resp = minioClient.putObject(PutObjectArgs.builder()
.bucket(props.getMinioBucketName())
.object(path)
.stream(inputStream, inputStream.available(), -1)
.contentType(contentType)
.build());
log.debug("minio上传文件成功。bucket:{}, object:{}, privacyType:{}", resp.bucket(), resp.object(), privacyType);
// 返回值要存储到数据库,供用户访问,因此使用外网域名
return props.getMinioExternalDomain() + "/" + Paths.get(resp.bucket()).resolve(resp.object()).toString();
} catch (Exception e) {
String errorMsg = ExceptionUtils.getErrorStackTrace(e);
throw new EpmetException(EpmetErrorCode.SERVER_ERROR.getCode(), errorMsg);
}
}
@Override
public String uploadSuffix(InputStream inputStream, String suffix, String privacyType) {
CloudStorageConfig.MinioStorageConfigProps props = this.config.getMinio().getConfigByPrivacy(privacyType);
return upload(inputStream, getPath(props.getMinioPrefix(), suffix, privacyType), privacyType);
}
@Override
public void down(String privacyType) throws IOException {
}
@Override
public boolean delete(String objectName, String privacyType) {
return false;
}
}

2
epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/OssFactory.java

@ -40,6 +40,8 @@ public final class OssFactory {
abstractCloudStorageService = new FastDFSCloudStorageService(config);
}else if(config.getType() == OssTypeEnum.LOCAL.value()){
abstractCloudStorageService = new LocalCloudStorageService(config);
}else if(config.getType() == OssTypeEnum.MINIO.value()){
abstractCloudStorageService = new MinioStorageService(config);
}
}
return abstractCloudStorageService;

Loading…
Cancel
Save