提交集成minio的代码

dev_2.0.0
liu 1 year ago
parent 61f72c6ec8
commit be56dbb188

@ -44,11 +44,14 @@
<mysql-connector-java.version>8.0.26</mysql-connector-java.version>
<io-swagger.version>1.5.22</io-swagger.version>
<lock4j.version>2.2.5</lock4j.version>
<minio.version>8.5.7</minio.version>
<okhttp.version>4.9.0</okhttp.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
@ -121,6 +124,18 @@
<artifactId>swagger-annotations</artifactId>
<version>${io-swagger.version}</version>
</dependency>
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>${minio.version}</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>${okhttp.version}</version>
</dependency>
</dependencies>
</dependencyManagement>

@ -101,6 +101,16 @@
<artifactId>hutool-all</artifactId>
</dependency>
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
</dependency>

@ -37,21 +37,21 @@ public class JwtInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
//请求消息头获取用户ID
String token = request.getHeader("token");
if (StrUtil.isBlank(token)) {
// 如果是swagger来的接口,说明这里是测试的,会伪造一个用户
if (StrUtil.isNotBlank(request.getHeader("Knife4j-Gateway-Code"))) {
cacheAuth(JWTUtil.parseToken(devActiveUser()));
return true;
} else {
throw new BusinessException("当前用户未登录", HttpStatus.UNAUTHORIZED.value());
}
}
JWT jwt = JWTUtil.parseToken(token);
// 校验token是否过期,如果过期了,需要提示过期重新登录
checkTokenExpire(jwt);
cacheAuth(jwt);
// //请求消息头获取用户ID
// String token = request.getHeader("token");
// if (StrUtil.isBlank(token)) {
// // 如果是swagger来的接口,说明这里是测试的,会伪造一个用户
// if (StrUtil.isNotBlank(request.getHeader("Knife4j-Gateway-Code"))) {
// cacheAuth(JWTUtil.parseToken(devActiveUser()));
// return true;
// } else {
// throw new BusinessException("当前用户未登录", HttpStatus.UNAUTHORIZED.value());
// }
// }
// JWT jwt = JWTUtil.parseToken(token);
// // 校验token是否过期,如果过期了,需要提示过期重新登录
// checkTokenExpire(jwt);
// cacheAuth(jwt);
return true;
}

@ -0,0 +1,24 @@
package com.supervision.config;
import io.minio.MinioClient;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MinioConfig {
/**
* JavaMinioClient
*/
@Bean
@ConditionalOnProperty(prefix = "minio",name = "url")
public MinioClient minioClient(MinioProperties minioProperties) {
return MinioClient.builder().endpoint(minioProperties.getUrl())
.credentials(minioProperties.getAccessKey(), minioProperties.getSecretKey())
.build();
}
}

@ -0,0 +1,19 @@
package com.supervision.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@Component
@ConfigurationProperties(prefix = "minio")
public class MinioProperties {
private String url;
private String accessKey;
private String secretKey;
private String bucketName;
}

@ -0,0 +1,85 @@
package com.supervision.util;
import com.supervision.config.MinioProperties;
import io.minio.*;
import io.minio.http.Method;
import lombok.extern.slf4j.Slf4j;
import java.io.InputStream;
@Slf4j
public class MinioUtil {
private static final MinioClient minioClient = SpringBeanUtil.getBean(MinioClient.class);
private static final String bucketName = SpringBeanUtil.getBean(MinioProperties.class).getBucketName();
static {
try {
if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) {
log.info("未找到bucket,自动建立");
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
*
*/
public static String uploadFile(InputStream stream, String objectName) throws Exception {
ObjectWriteResponse objectWriteResponse = minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(objectName)
.stream(stream, -1, 10485760).build());
return objectWriteResponse.object();
}
/**
*
*/
public static InputStream download(String fileId) throws Exception {
return minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileId).build());
}
/**
*
*/
public static void deleteObject(String fileId) throws Exception {
minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(fileId).build());
}
/**
*
*
* @Param: [bucket, objectName]
* @return: java.lang.String
* @Author: MrFugui
* @Date: 2021/11/15
*/
public static String getObjectInfo(String fileId) throws Exception {
return minioClient.statObject(StatObjectArgs.builder().bucket(bucketName).object(fileId).build()).toString();
}
/**
* HTTP GETpresigned URL/URL使
*
* @Param: [bucketName, objectName, expires]
* @return: java.lang.String
* @Author: MrFugui
* @Date: 2021/11/15
*/
public static String getPresignedObjectUrl(String bucketName, String objectName, Integer expires) throws Exception {
GetPresignedObjectUrlArgs build = GetPresignedObjectUrlArgs
.builder().bucket(bucketName).object(objectName).expiry(expires).method(Method.GET).build();
return minioClient.getPresignedObjectUrl(build);
}
}

@ -3,6 +3,7 @@ package com.supervision;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScans;
import org.springframework.scheduling.annotation.EnableScheduling;

@ -7,9 +7,14 @@ import cn.hutool.json.JSONUtil;
import com.supervision.exception.BusinessException;
import com.supervision.model.ConfigPhysicalTool;
import com.supervision.service.ConfigPhysicalToolService;
import com.supervision.util.MinioUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
@RestController
@ -86,6 +91,16 @@ public class TestController {
return signServer;
}
@PostMapping("testFileUpload")
public String testFileUpload(MultipartFile file) throws Exception {
return MinioUtil.uploadFile(file.getInputStream(), UUID.randomUUID().toString());
}
@PostMapping("downloadFile")
public InputStream downloadFile(String fileId) throws Exception {
return MinioUtil.download(fileId);
}
}

@ -133,18 +133,10 @@ public class UserController {
@ApiOperation("获取本机IP地址,用来给websocket使用")
@GetMapping("queryWebSocketUrl")
public String queryWebSocketUrl() {
// 如果是本地开发环境,则获取本机IP地址
if ("local".equals(active)) {
String template = "ws://{}:{}/virtual-patient/";
String localhostStr = NetUtil.getLocalhostStr();
return StrUtil.format(template, localhostStr, port);
} else {
String template = "wss://{}:{}/virtual-patient-websocket/";
if (StrUtil.isNotBlank(wsIp) && StrUtil.isNotBlank(wsPort)) {
return StrUtil.format(template, wsIp, wsPort);
}
String template = "wss://{}:{}/virtual-patient-websocket/";
if (StrUtil.isNotBlank(wsIp) && StrUtil.isNotBlank(wsPort)) {
return StrUtil.format(template, wsIp, wsPort);
}
throw new BusinessException("未获取到ws的nginx地址,请确认配置文件是否配置");
}

@ -51,6 +51,12 @@ spring:
port: 6379
password: 123456
minio:
url: http://192.168.10.138:9002
accessKey: admin
secretKey: 12345678
bucketName: virtual-patient-bucket-dev
mybatis-plus:
mapper-locations: classpath*:mapper/**/*.xml

@ -51,6 +51,11 @@ spring:
port: 6379
password: 123456
minio:
url: http://192.168.10.138:9002
accessKey: admin
secretKey: 12345678
bucketName: virtual-patient-bucket-dev
mybatis-plus:
mapper-locations: classpath*:mapper/**/*.xml
@ -72,4 +77,10 @@ human:
room-id: /getRoomId
text-driven: /text_driven
talk-status: /talkStatus
resourceMaxNumber: 5
resourceMaxNumber: 5
# local环境使用dev的
ws:
# nginx的wss地址(如果是wss的,那么带不带s都可以访问)
nginx-ip: 192.168.10.138
nginx-port: 443
Loading…
Cancel
Save