This commit is contained in:
ls
2024-10-12 09:52:06 +08:00
parent 76defc45b7
commit 08175e2602
6 changed files with 101 additions and 75 deletions

View File

@@ -70,6 +70,7 @@ services:
# context: ../physical-web # context: ../physical-web
container_name: physical-web container_name: physical-web
image: registry.cn-shanghai.aliyuncs.com/physical/physical-web image: registry.cn-shanghai.aliyuncs.com/physical/physical-web
hostname: physical-web
depends_on: depends_on:
- physical-launcher - physical-launcher
networks: networks:

View File

@@ -13,6 +13,7 @@ import java.net.URLDecoder;
/** /**
* minio文件上传工具类 * minio文件上传工具类
*
* @author: jeecg-boot * @author: jeecg-boot
*/ */
@Slf4j @Slf4j
@@ -21,10 +22,8 @@ public class MinioUtil {
private static String minioName; private static String minioName;
private static String minioPass; private static String minioPass;
private static String bucketName; private static String bucketName;
private static String minioPublicUrl;
public static void setMinioUrl(String minioUrl) { private static MinioClient minioClient = null;
MinioUtil.minioUrl = minioUrl;
}
public static void setMinioName(String minioName) { public static void setMinioName(String minioName) {
MinioUtil.minioName = minioName; MinioUtil.minioName = minioName;
@@ -34,22 +33,33 @@ public class MinioUtil {
MinioUtil.minioPass = minioPass; MinioUtil.minioPass = minioPass;
} }
public static void setBucketName(String bucketName) {
MinioUtil.bucketName = bucketName;
}
public static String getMinioUrl() { public static String getMinioUrl() {
return minioUrl; return minioUrl;
} }
public static void setMinioUrl(String minioUrl) {
MinioUtil.minioUrl = minioUrl;
}
public static String getMinioPublicUrl() {
return minioPublicUrl;
}
public static void setMinioPublicUrl(String minioPublicUrl) {
MinioUtil.minioPublicUrl = minioPublicUrl;
}
public static String getBucketName() { public static String getBucketName() {
return bucketName; return bucketName;
} }
private static MinioClient minioClient = null; public static void setBucketName(String bucketName) {
MinioUtil.bucketName = bucketName;
}
/** /**
* 上传文件 * 上传文件
*
* @param file * @param file
* @return * @return
*/ */
@@ -64,13 +74,13 @@ public class MinioUtil {
//update-end-author:liusq date:20210809 for: 过滤上传文件类型 //update-end-author:liusq date:20210809 for: 过滤上传文件类型
String newBucket = bucketName; String newBucket = bucketName;
if(oConvertUtils.isNotEmpty(customBucket)){ if (oConvertUtils.isNotEmpty(customBucket)) {
newBucket = customBucket; newBucket = customBucket;
} }
try { try {
initMinio(minioUrl, minioName,minioPass); initMinio(minioUrl, minioName, minioPass);
// 检查存储桶是否已经存在 // 检查存储桶是否已经存在
if(minioClient.bucketExists(BucketExistsArgs.builder().bucket(newBucket).build())) { if (minioClient.bucketExists(BucketExistsArgs.builder().bucket(newBucket).build())) {
log.info("Bucket already exists."); log.info("Bucket already exists.");
} else { } else {
// 创建一个名为ota的存储桶 // 创建一个名为ota的存储桶
@@ -80,28 +90,28 @@ public class MinioUtil {
InputStream stream = file.getInputStream(); InputStream stream = file.getInputStream();
// 获取文件名 // 获取文件名
String orgName = file.getOriginalFilename(); String orgName = file.getOriginalFilename();
if("".equals(orgName)){ if ("".equals(orgName)) {
orgName=file.getName(); orgName = file.getName();
} }
orgName = CommonUtils.getFileName(orgName); orgName = CommonUtils.getFileName(orgName);
String objectName = bizPath+"/" String objectName = bizPath + "/"
+( orgName.indexOf(".")==-1 + (orgName.indexOf(".") == -1
?orgName + "_" + System.currentTimeMillis() ? orgName + "_" + System.currentTimeMillis()
:orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.lastIndexOf(".")) : orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.lastIndexOf("."))
); );
// 使用putObject上传一个本地文件到存储桶中。 // 使用putObject上传一个本地文件到存储桶中。
if(objectName.startsWith(SymbolConstant.SINGLE_SLASH)){ if (objectName.startsWith(SymbolConstant.SINGLE_SLASH)) {
objectName = objectName.substring(1); objectName = objectName.substring(1);
} }
PutObjectArgs objectArgs = PutObjectArgs.builder().object(objectName) PutObjectArgs objectArgs = PutObjectArgs.builder().object(objectName)
.bucket(newBucket) .bucket(newBucket)
.contentType("application/octet-stream") .contentType("application/octet-stream")
.stream(stream,stream.available(),-1).build(); .stream(stream, stream.available(), -1).build();
minioClient.putObject(objectArgs); minioClient.putObject(objectArgs);
stream.close(); stream.close();
fileUrl = minioUrl+newBucket+"/"+objectName; fileUrl = minioPublicUrl + newBucket + "/" + objectName;
}catch (Exception e){ } catch (Exception e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
} }
return fileUrl; return fileUrl;
@@ -109,21 +119,23 @@ public class MinioUtil {
/** /**
* 文件上传 * 文件上传
*
* @param file * @param file
* @param bizPath * @param bizPath
* @return * @return
*/ */
public static String upload(MultipartFile file, String bizPath) throws Exception { public static String upload(MultipartFile file, String bizPath) throws Exception {
return upload(file,bizPath,null); return upload(file, bizPath, null);
} }
/** /**
* 获取文件流 * 获取文件流
*
* @param bucketName * @param bucketName
* @param objectName * @param objectName
* @return * @return
*/ */
public static InputStream getMinioFile(String bucketName,String objectName){ public static InputStream getMinioFile(String bucketName, String objectName) {
InputStream inputStream = null; InputStream inputStream = null;
try { try {
initMinio(minioUrl, minioName, minioPass); initMinio(minioUrl, minioName, minioPass);
@@ -138,39 +150,41 @@ public class MinioUtil {
/** /**
* 删除文件 * 删除文件
*
* @param bucketName * @param bucketName
* @param objectName * @param objectName
* @throws Exception * @throws Exception
*/ */
public static void removeObject(String bucketName, String objectName) { public static void removeObject(String bucketName, String objectName) {
try { try {
initMinio(minioUrl, minioName,minioPass); initMinio(minioUrl, minioName, minioPass);
RemoveObjectArgs objectArgs = RemoveObjectArgs.builder().object(objectName) RemoveObjectArgs objectArgs = RemoveObjectArgs.builder().object(objectName)
.bucket(bucketName).build(); .bucket(bucketName).build();
minioClient.removeObject(objectArgs); minioClient.removeObject(objectArgs);
}catch (Exception e){ } catch (Exception e) {
log.info("文件删除失败" + e.getMessage()); log.info("文件删除失败" + e.getMessage());
} }
} }
/** /**
* 获取文件外链 * 获取文件外链
*
* @param bucketName * @param bucketName
* @param objectName * @param objectName
* @param expires * @param expires
* @return * @return
*/ */
public static String getObjectUrl(String bucketName, String objectName, Integer expires) { public static String getObjectUrl(String bucketName, String objectName, Integer expires) {
initMinio(minioUrl, minioName,minioPass); initMinio(minioUrl, minioName, minioPass);
try{ try {
//update-begin---author:liusq Date:20220121 for获取文件外链报错提示method不能为空导致文件下载和预览失败---- //update-begin---author:liusq Date:20220121 for获取文件外链报错提示method不能为空导致文件下载和预览失败----
GetPresignedObjectUrlArgs objectArgs = GetPresignedObjectUrlArgs.builder().object(objectName) GetPresignedObjectUrlArgs objectArgs = GetPresignedObjectUrlArgs.builder().object(objectName)
.bucket(bucketName) .bucket(bucketName)
.expiry(expires).method(Method.GET).build(); .expiry(expires).method(Method.GET).build();
//update-begin---author:liusq Date:20220121 for获取文件外链报错提示method不能为空导致文件下载和预览失败---- //update-begin---author:liusq Date:20220121 for获取文件外链报错提示method不能为空导致文件下载和预览失败----
String url = minioClient.getPresignedObjectUrl(objectArgs); String url = minioClient.getPresignedObjectUrl(objectArgs);
return URLDecoder.decode(url,"UTF-8"); return URLDecoder.decode(url, "UTF-8");
}catch (Exception e){ } catch (Exception e) {
log.info("文件路径获取失败" + e.getMessage()); log.info("文件路径获取失败" + e.getMessage());
} }
return null; return null;
@@ -178,12 +192,13 @@ public class MinioUtil {
/** /**
* 初始化客户端 * 初始化客户端
*
* @param minioUrl * @param minioUrl
* @param minioName * @param minioName
* @param minioPass * @param minioPass
* @return * @return
*/ */
private static MinioClient initMinio(String minioUrl, String minioName,String minioPass) { private static MinioClient initMinio(String minioUrl, String minioName, String minioPass) {
if (minioClient == null) { if (minioClient == null) {
try { try {
minioClient = MinioClient.builder() minioClient = MinioClient.builder()
@@ -199,13 +214,14 @@ public class MinioUtil {
/** /**
* 上传文件到minio * 上传文件到minio
*
* @param stream * @param stream
* @param relativePath * @param relativePath
* @return * @return
*/ */
public static String upload(InputStream stream,String relativePath) throws Exception { public static String upload(InputStream stream, String relativePath) throws Exception {
initMinio(minioUrl, minioName,minioPass); initMinio(minioUrl, minioName, minioPass);
if(minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) { if (minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) {
log.info("Bucket already exists."); log.info("Bucket already exists.");
} else { } else {
// 创建一个名为ota的存储桶 // 创建一个名为ota的存储桶
@@ -215,10 +231,10 @@ public class MinioUtil {
PutObjectArgs objectArgs = PutObjectArgs.builder().object(relativePath) PutObjectArgs objectArgs = PutObjectArgs.builder().object(relativePath)
.bucket(bucketName) .bucket(bucketName)
.contentType("application/octet-stream") .contentType("application/octet-stream")
.stream(stream,stream.available(),-1).build(); .stream(stream, stream.available(), -1).build();
minioClient.putObject(objectArgs); minioClient.putObject(objectArgs);
stream.close(); stream.close();
return minioUrl+bucketName+"/"+relativePath; return minioUrl + bucketName + "/" + relativePath;
} }
} }

View File

@@ -11,6 +11,7 @@ import org.springframework.context.annotation.Configuration;
/** /**
* Minio文件上传配置文件 * Minio文件上传配置文件
*
* @author: jeecg-boot * @author: jeecg-boot
*/ */
@Slf4j @Slf4j
@@ -19,6 +20,8 @@ import org.springframework.context.annotation.Configuration;
public class MinioConfig { public class MinioConfig {
@Value(value = "${jeecg.minio.minio_url}") @Value(value = "${jeecg.minio.minio_url}")
private String minioUrl; private String minioUrl;
@Value(value = "${jeecg.minio.minio_public_url}")
private String minioPublicUrl;
@Value(value = "${jeecg.minio.minio_name}") @Value(value = "${jeecg.minio.minio_name}")
private String minioName; private String minioName;
@Value(value = "${jeecg.minio.minio_pass}") @Value(value = "${jeecg.minio.minio_pass}")
@@ -27,17 +30,18 @@ public class MinioConfig {
private String bucketName; private String bucketName;
@Bean @Bean
public void initMinio(){ public void initMinio() {
if(!minioUrl.startsWith(CommonConstant.STR_HTTP)){ if (!minioUrl.startsWith(CommonConstant.STR_HTTP)) {
minioUrl = "http://" + minioUrl; minioUrl = "http://" + minioUrl;
} }
if(!minioUrl.endsWith(SymbolConstant.SINGLE_SLASH)){ if (!minioUrl.endsWith(SymbolConstant.SINGLE_SLASH)) {
minioUrl = minioUrl.concat(SymbolConstant.SINGLE_SLASH); minioUrl = minioUrl.concat(SymbolConstant.SINGLE_SLASH);
} }
MinioUtil.setMinioUrl(minioUrl); MinioUtil.setMinioUrl(minioUrl);
MinioUtil.setMinioName(minioName); MinioUtil.setMinioName(minioName);
MinioUtil.setMinioPass(minioPass); MinioUtil.setMinioPass(minioPass);
MinioUtil.setBucketName(bucketName); MinioUtil.setBucketName(bucketName);
MinioUtil.setMinioPublicUrl(minioPublicUrl);
} }
} }

View File

@@ -14,4 +14,4 @@ EXPOSE 8080
#ADD ./src/main/resources/jeecg ./config/jeecg #ADD ./src/main/resources/jeecg ./config/jeecg
ADD ./target/physical-launcher-3.7.0.jar ./ ADD ./target/physical-launcher-3.7.0.jar ./
CMD sleep 60;java -Djava.security.egd=file:/dev/./urandom -jar physical-launcher-3.7.0.jar --spring.profiles.active=prod CMD sleep 60;java -Djava.security.egd=file:/dev/./urandom -jar physical-launcher-3.7.0.jar --spring.profiles.active=test

View File

@@ -245,7 +245,7 @@ jeecg:
file-view-domain: http://fileview.jeecg.com file-view-domain: http://fileview.jeecg.com
# minio文件上传 # minio文件上传
minio: minio:
minio_url: http://physical-oss:9000 minio_url: http://physical-minio:9000
minio_name: root minio_name: root
minio_pass: 12345678 minio_pass: 12345678
bucketName: physical bucketName: physical

View File

@@ -12,7 +12,7 @@ server:
include-stacktrace: ALWAYS include-stacktrace: ALWAYS
include-message: ALWAYS include-message: ALWAYS
servlet: servlet:
context-path: /jeecg-boot context-path: /physical
compression: compression:
enabled: true enabled: true
min-response-size: 1024 min-response-size: 1024
@@ -67,7 +67,7 @@ spring:
quartz: quartz:
job-store-type: jdbc job-store-type: jdbc
initialize-schema: embedded initialize-schema: embedded
#定时任务启动开关true-开 false-关 #定时任务开关true-开 false-关
auto-startup: true auto-startup: true
#延迟1秒启动定时任务 #延迟1秒启动定时任务
startup-delay: 1s startup-delay: 1s
@@ -95,10 +95,10 @@ spring:
jackson: jackson:
date-format: yyyy-MM-dd HH:mm:ss date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8 time-zone: GMT+8
aop:
proxy-target-class: true
jpa: jpa:
open-in-view: false open-in-view: false
aop:
proxy-target-class: true
#配置freemarker #配置freemarker
freemarker: freemarker:
# 设置模板后缀名 # 设置模板后缀名
@@ -124,7 +124,7 @@ spring:
static-locations: classpath:/static/,classpath:/public/ static-locations: classpath:/static/,classpath:/public/
autoconfigure: autoconfigure:
exclude: exclude:
- com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure - com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceAutoConfigure
- org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration - org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration
datasource: datasource:
druid: druid:
@@ -166,9 +166,9 @@ spring:
slow-sql-millis: 5000 slow-sql-millis: 5000
datasource: datasource:
master: master:
url: jdbc:mysql://127.0.0.1:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai url: jdbc:mysql://physical-mysql:3306/physical-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
username: root username: root
password: root password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver
# 多数据源配置 # 多数据源配置
#multi-datasource1: #multi-datasource1:
@@ -177,11 +177,15 @@ spring:
#password: root #password: root
#driver-class-name: com.mysql.cj.jdbc.Driver #driver-class-name: com.mysql.cj.jdbc.Driver
#redis 配置 #redis 配置
redis: data:
database: 0 redis:
host: 192.168.1.188 host: physical-redis
port: 6379 password: ''
password: '' port: 6379
database: 0
main:
allow-bean-definition-overriding=true:
#mybatis plus 设置 #mybatis plus 设置
mybatis-plus: mybatis-plus:
mapper-locations: classpath*:org/jeecg/**/xml/*Mapper.xml mapper-locations: classpath*:org/jeecg/**/xml/*Mapper.xml
@@ -189,13 +193,13 @@ mybatis-plus:
# 关闭MP3.0自带的banner # 关闭MP3.0自带的banner
banner: false banner: false
db-config: db-config:
#主键类型 #主键类型 0:"数据库ID自增",1:"该类型为未设置主键类型", 2:"用户输入ID",3:"全局唯一ID (数字类型唯一ID)", 4:"全局唯一ID UUID",5:"字符串全局唯一ID (idWorker 的字符串表示)";
id-type: ASSIGN_ID id-type: ASSIGN_ID
# 默认数据库表下划线命名 # 默认数据库表下划线命名
table-underline: true table-underline: true
configuration: configuration:
# 这个配置会将执行的sql打印出来在开发或测试的时候可以用 # 这个配置会将执行的sql打印出来在开发或测试的时候可以用
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# 返回类型为Map,显示null对应的字段 # 返回类型为Map,显示null对应的字段
call-setters-on-nulls: true call-setters-on-nulls: true
#jeecg专用配置 #jeecg专用配置
@@ -205,26 +209,26 @@ jeecg:
# 平台上线安全配置 # 平台上线安全配置
firewall: firewall:
# 数据源安全 (开启后Online报表和图表的数据源为必填) # 数据源安全 (开启后Online报表和图表的数据源为必填)
dataSourceSafe: false dataSourceSafe: true
# 低代码模式dev:开发模式prod:发布模式——关闭所有在线开发配置能力) # 低代码模式dev:开发模式prod:发布模式——关闭所有在线开发配置能力)
lowCodeMode: dev lowCodeMode: prod
# 签名密钥串(前后端要一致,正式发布请自行修改) # 签名密钥串(前后端要一致,正式发布请自行修改)
signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a
#签名拦截接口 #签名拦截接口
signUrls: /sys/dict/getDictItems/*,/sys/dict/loadDict/*,/sys/dict/loadDictOrderByValue/*,/sys/dict/loadDictItem/*,/sys/dict/loadTreeData,/sys/api/queryTableDictItemsByCode,/sys/api/queryFilterTableDictInfo,/sys/api/queryTableDictByKeys,/sys/api/translateDictFromTable,/sys/api/translateDictFromTableByKeys,/sys/sendChangePwdSms,/sys/user/sendChangePhoneSms,/sys/sms,/desform/api/sendVerifyCode signUrls: /sys/dict/getDictItems/*,/sys/dict/loadDict/*,/sys/dict/loadDictOrderByValue/*,/sys/dict/loadDictItem/*,/sys/dict/loadTreeData,/sys/api/queryTableDictItemsByCode,/sys/api/queryFilterTableDictInfo,/sys/api/queryTableDictByKeys,/sys/api/translateDictFromTable,/sys/api/translateDictFromTableByKeys,/sys/sendChangePwdSms,/sys/user/sendChangePhoneSms,/sys/sms,/desform/api/sendVerifyCode
# local\minio\alioss # local\minio\alioss
uploadType: local uploadType: minio
# 前端访问地址 # 前端访问地址
domainUrl: domainUrl:
pc: http://localhost:3100 pc: http://localhost:3100
app: http://localhost:8051 app: http://localhost:8051
path: path:
#文件上传根目录 设置 #文件上传根目录 设置
upload: D://opt//upFiles upload: /opt/jeecg-boot/upload
#webapp文件路径 #webapp文件路径
webapp: D://opt//webapp webapp: /opt/jeecg-boot/webapp
shiro: shiro:
excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/bigscreen/category/**,/bigscreen/visual/**,/bigscreen/map/**,/jmreport/bigscreen2/** excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/bigscreen/category/**,/bigscreen/visual/**,/bigscreen/map/**,/jmreport/bigscreen2/**,/api/getUserInfo,/api/sys/common/**,/sys/common/**
#阿里云oss存储和大鱼短信秘钥配置 #阿里云oss存储和大鱼短信秘钥配置
oss: oss:
accessKey: ?? accessKey: ??
@@ -235,20 +239,21 @@ jeecg:
# ElasticSearch 设置 # ElasticSearch 设置
elasticsearch: elasticsearch:
cluster-name: jeecg-ES cluster-name: jeecg-ES
cluster-nodes: 192.168.1.188:9200 cluster-nodes: 127.0.0.1:9200
check-enabled: false check-enabled: true
# 在线预览文件服务器地址配置 # 在线预览文件服务器地址配置
file-view-domain: http://127.0.0.1:8012 file-view-domain: http://fileview.jeecg.com
# minio文件上传 # minio文件上传
minio: minio:
minio_url: http://minio.jeecg.com minio_url: http://127.0.0.1:9000/
minio_name: ?? minio_public_url: http://58.215.212.230:8005/oss/
minio_pass: ?? minio_name: root
bucketName: ?? minio_pass: 12345678
bucketName: physical
#大屏报表参数设置 #大屏报表参数设置
jmreport: jmreport:
#多租户模式,默认值为空(created:按照创建人隔离、tenant:按照租户隔离) (v1.6.2+ 新增) #多租户模式,默认值为空(created:按照创建人隔离、tenant:按照租户隔离) (v1.6.2+ 新增)
saasMode: saasMode:
# 平台上线安全配置(v1.6.2+ 新增) # 平台上线安全配置(v1.6.2+ 新增)
firewall: firewall:
# 数据源安全 (开启后不允许使用平台数据源、SQL解析加签并且不允许查询数据库) # 数据源安全 (开启后不允许使用平台数据源、SQL解析加签并且不允许查询数据库)
@@ -268,18 +273,18 @@ jeecg:
logRetentionDays: 30 logRetentionDays: 30
#分布式锁配置 #分布式锁配置
redisson: redisson:
address: 127.0.0.1:6379 address: physical-redis:6379
password: password:
type: STANDALONE type: STANDALONE
enabled: true enabled: true
#cas单点登录
cas:
prefixUrl: http://cas.example.org:8443/cas
#Mybatis输出sql日志 #Mybatis输出sql日志
logging: logging:
level: level:
org.flywaydb: debug org.flywaydb: debug
org.jeecg.modules.system.mapper: info org.jeecg.modules.system.mapper: info
#cas单点登录
cas:
prefixUrl: http://cas.example.org:8443/cas
#swagger #swagger
knife4j: knife4j:
#开启增强配置 #开启增强配置
@@ -287,7 +292,7 @@ knife4j:
#开启生产环境屏蔽 #开启生产环境屏蔽
production: false production: false
basic: basic:
enable: true enable: false
username: jeecg username: jeecg
password: jeecg1314 password: jeecg1314
#第三方登录 #第三方登录