main
HuangHai 2 months ago
parent 7fc60be11e
commit 45c7606884

@ -4,7 +4,12 @@ import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.dsideal.aiSupport.Plugin.YamlProp;
import com.jfinal.kit.Prop;
import cn.hutool.core.io.FileUtil;
import cn.hutool.http.HttpUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@ -12,6 +17,7 @@ import java.util.Map;
import static com.dsideal.aiSupport.AiSupportApplication.getEnvPrefix;
public class KlCommon {
private static final Logger log = LoggerFactory.getLogger(KlCommon.class);
// 获取项目根目录路径
protected static String projectRoot = System.getProperty("user.dir").replace("\\","/")+"/dsAiSupport";
// 拼接相对路径
@ -47,5 +53,22 @@ public class KlCommon {
return null;
}
}
/**
* URL
*
* @param fileUrl URL
* @param saveFilePath
* @throws Exception
*/
public static void downloadFile(String fileUrl, String saveFilePath) throws Exception {
try {
// 使用Hutool下载文件
long fileSize = HttpUtil.downloadFile(fileUrl, FileUtil.file(saveFilePath));
log.info("文件下载成功,保存路径: {}, 文件大小: {}字节", saveFilePath, fileSize);
} catch (Exception e) {
log.error("文件下载失败: {}", e.getMessage(), e);
throw new Exception("文件下载失败: " + e.getMessage(), e);
}
}
}

@ -3,7 +3,6 @@ package com.dsideal.aiSupport.Util.KeLing;
import cn.hutool.core.io.FileUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
@ -25,18 +24,6 @@ public class KlImg2Video extends KlCommon {
private static final String GENERATION_PATH = "/v1/videos/image2video";
private static final String QUERY_PATH = "/v1/videos/image2video/";
/**
* 使URL
*
* @param imageUrl URL
* @param modelName kling-v1, kling-v1-5, kling-v1-6
* @return ID
* @throws Exception
*/
public static String generateVideo(String imageUrl, String modelName) throws Exception {
return generateVideo(imageUrl, modelName, null);
}
/**
* 使URL
*
@ -141,63 +128,8 @@ public class KlImg2Video extends KlCommon {
return responseJson;
}
/**
* ID
*
* @param externalTaskId ID
* @return
* @throws Exception
*/
public static JSONObject queryTaskStatusByExternalId(String externalTaskId) throws Exception {
// 获取JWT令牌
String jwt = getJwt();
// 使用Hutool发送GET请求
HttpResponse response = HttpRequest.get(BASE_URL + GENERATION_PATH + "?external_task_id=" + externalTaskId)
.header("Content-Type", "application/json")
.header("Authorization", "Bearer " + jwt)
.execute();
// 检查响应状态码
if (response.getStatus() != 200) {
throw new Exception("请求失败,状态码:" + response.getStatus());
}
// 解析响应
String responseBody = response.body();
JSONObject responseJson = JSONUtil.parseObj(responseBody);
log.info("查询任务状态响应:{}", responseBody);
// 检查响应状态
int code = responseJson.getInt("code");
if (code != 0) {
String message = responseJson.getStr("message");
String solution = KlErrorCode.getSolutionByCode(code);
String errorMsg = String.format("查询任务状态失败:[%d] %s - %s", code, message, solution);
throw new Exception(errorMsg);
}
return responseJson;
}
/**
* URL
*
* @param fileUrl URL
* @param saveFilePath
* @throws Exception
*/
public static void downloadFile(String fileUrl, String saveFilePath) throws Exception {
try {
// 使用Hutool下载文件
long fileSize = HttpUtil.downloadFile(fileUrl, FileUtil.file(saveFilePath));
log.info("文件下载成功,保存路径: {}, 文件大小: {}字节", saveFilePath, fileSize);
} catch (Exception e) {
log.error("文件下载失败: {}", e.getMessage(), e);
throw e;
}
}
// 下载函数已移至KlCommon类
public static void main(String[] args) throws Exception {
// 获取项目根目录路径

@ -1,9 +1,7 @@
package com.dsideal.aiSupport.Util.KeLing;
import cn.hutool.core.io.FileUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
@ -130,22 +128,7 @@ public class KlText2Video extends KlCommon {
return responseJson;
}
/**
* URL
*
* @param fileUrl URL
* @param saveFilePath
*/
public static void downloadFile(String fileUrl, String saveFilePath) {
try {
// 使用Hutool下载文件
long fileSize = HttpUtil.downloadFile(fileUrl, FileUtil.file(saveFilePath));
log.info("文件下载成功,保存路径: {}, 文件大小: {}字节", saveFilePath, fileSize);
} catch (Exception e) {
log.error("文件下载失败: {}", e.getMessage(), e);
throw e;
}
}
// 下载函数已移至KlCommon类
public static void main(String[] args) throws Exception {
// 提示词和模型名称

@ -15,8 +15,8 @@ import org.slf4j.LoggerFactory;
import java.util.HashMap;
import java.util.Map;
public class KlText2Img extends KlCommon {
private static final Logger log = LoggerFactory.getLogger(KlText2Img.class);
public class KlTxt2Img extends KlCommon {
private static final Logger log = LoggerFactory.getLogger(KlTxt2Img.class);
private static final String BASE_URL = "https://api.klingai.com";
private static final String GENERATION_PATH = "/v1/images/generations";
private static final String QUERY_PATH = "/v1/images/generations/";
@ -119,22 +119,7 @@ public class KlText2Img extends KlCommon {
return responseJson;
}
/**
* URL
*
* @param fileUrl URL
* @param saveFilePath
*/
public static void downloadFile(String fileUrl, String saveFilePath) {
try {
// 使用Hutool下载文件
long fileSize = HttpUtil.downloadFile(fileUrl, FileUtil.file(saveFilePath));
log.info("文件下载成功,保存路径: {}, 文件大小: {}字节", saveFilePath, fileSize);
} catch (Exception e) {
log.error("文件下载失败: {}", e.getMessage(), e);
throw e;
}
}
// 下载函数已移至KlCommon类
public static void main(String[] args) throws Exception {
// 提示词和模型名称
@ -149,7 +134,7 @@ public class KlText2Img extends KlCommon {
String taskId = null;
boolean accountIssue = false;
while (generateRetryCount < maxGenerateRetries && !accountIssue) {
while (!accountIssue) {
try {
taskId = generateImage(prompt, modelName);
break;

@ -0,0 +1,18 @@
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {
"AWS": ["*"]
},
"Action": ["s3:GetBucketLocation", "s3:ListBucket"],
"Resource": ["arn:aws:s3:::dsideal"]
}, {
"Effect": "Allow",
"Principal": {
"AWS": ["*"]
},
"Action": ["s3:GetObject"],
"Resource": ["arn:aws:s3:::dsideal/*"]
}]
}

@ -0,0 +1,70 @@
# 上传文件的临时路径
uploadTempPath: c:/Windows/Temp
# 生成Token的密码
CookieMd5SingPwd: DsideaL4r5t6y7u
# 数据库信息
mysql:
driverClassName: com.mysql.cj.jdbc.Driver
user: ylt
password: Ycharge666
jdbcUrl: jdbc:mysql://10.10.14.210:22066/base_db?reWriteBatchedInserts=true
# redis
redis:
ip: 10.10.14.14
port: 18890
# JWT
jwt:
SECRET: ZXZnZWVr5b+r5LmQ5L2g55qE5Ye66KGM
minio:
endpoint: http://10.10.14.210:9000
accessKey: AOxWewe7pywwEc1NQeP6
secretKey: EiLaKLpLW6OHmjPxvMLBD11Zu3xtV1tdZU9PFVYO
bucketName: dsideal
url: http://10.10.14.210:9000/dsideal
# 网关配置
gateway:
# 超时配置(毫秒)
timeout:
connect: 10000
read: 30000
write: 30000
# 连接池配置
connection:
max: 5
keep-alive: 300
# 安全配置
security:
cors:
allowed-origins: "*" # 或者具体的域名列表,如 "http://localhost:8080,https://your-domain.com"
allowed-methods: "GET,POST,OPTIONS"
allowed-headers: "Content-Type,Authorization,Cookie"
allow-credentials: true
max-age: 3600
# ==============================================================
excel:
# 导出excel 的模板配置路径
excelExportTemplatePathSuffix: /ExcelExportTemplate/
# 导入excel 的模板配置路径
ExcelImportTemplatePathSuffix: /ExcelImportTemplate/
# 即梦
JiMeng:
# Access Key ID
ak: AKLTZjVlOGU1NzA1YWZkNDExMzkzYzY5YTNlOTRmMTMxODg
# Secret Access Key
sk: WkdabU9UTXdNVEJpTmpWbE5HVTJZVGxtTnpWbU5XSTBaRGN5TW1NMk5tRQ==
# 可灵
KeLing:
# Access Key ID
ak: c992fd02624d4900a93ca3b6da03d9e9
# Secret Access Key
sk: b37f67a00eb44f9bb57e4d530c328e1d

@ -0,0 +1,70 @@
# 上传文件的临时路径
uploadTempPath: /tmp
# 生成Token的密码
CookieMd5SingPwd: DsideaL4r5t6y7u
# 数据库信息
mysql:
driverClassName: com.mysql.cj.jdbc.Driver
user: ylt
password: Ycharge666
jdbcUrl: jdbc:mysql://10.10.14.210:22066/base_db?reWriteBatchedInserts=true
# redis
redis:
ip: 10.10.14.14
port: 18890
# JWT
jwt:
SECRET: ZXZnZWVr5b+r5LmQ5L2g55qE5Ye66KGM
minio:
endpoint: http://10.10.14.210:9000
accessKey: AOxWewe7pywwEc1NQeP6
secretKey: EiLaKLpLW6OHmjPxvMLBD11Zu3xtV1tdZU9PFVYO
bucketName: dsideal
url: http://10.10.14.210:9000/dsideal
# 网关配置
gateway:
# 超时配置(毫秒)
timeout:
connect: 10000
read: 30000
write: 30000
# 连接池配置
connection:
max: 5
keep-alive: 300
# 安全配置
security:
cors:
allowed-origins: "*" # 或者具体的域名列表,如 "http://localhost:8080,https://your-domain.com"
allowed-methods: "GET,POST,OPTIONS"
allowed-headers: "Content-Type,Authorization,Cookie"
allow-credentials: true
max-age: 3600
# ==============================================================
excel:
# 导出excel 的模板配置路径
excelExportTemplatePathSuffix: /ExcelExportTemplate/
# 导入excel 的模板配置路径
ExcelImportTemplatePathSuffix: /ExcelImportTemplate/
# 即梦
JiMeng:
# Access Key ID
ak: AKLTZjVlOGU1NzA1YWZkNDExMzkzYzY5YTNlOTRmMTMxODg
# Secret Access Key
sk: WkdabU9UTXdNVEJpTmpWbE5HVTJZVGxtTnpWbU5XSTBaRGN5TW1NMk5tRQ==
# 可灵
KeLing:
# Access Key ID
ak: c992fd02624d4900a93ca3b6da03d9e9
# Secret Access Key
sk: b37f67a00eb44f9bb57e4d530c328e1d

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 定义日志文件的存储地址 -->
<property name="LOG_HOME" value="logs" />
<!-- 控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/application.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/application.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 日志级别 -->
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
<!-- 自定义包的日志级别 -->
<logger name="com.dsideal" level="DEBUG"/>
<logger name="com.jfinal" level="INFO"/>
</configuration>

@ -0,0 +1,11 @@
$$\ $$$$$$$\
$$ | $$ __$$\
$$$$$$$ | $$$$$$$\ $$ | $$ | $$$$$$\ $$$$$$$\
$$ __$$ |$$ _____|$$$$$$$ |$$ __$$\ $$ _____|
$$ / $$ |\$$$$$$\ $$ __$$< $$$$$$$$ |\$$$$$$\
$$ | $$ | \____$$\ $$ | $$ |$$ ____| \____$$\
\$$$$$$$ |$$$$$$$ |$$ | $$ |\$$$$$$$\ $$$$$$$ |
\_______|\_______/ \__| \__| \_______|\_______/
power by http://patorjk.com/software/taag/

@ -0,0 +1,37 @@
{
"info": {
"_postman_id": "",
"name": "${projectName}",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"item": [
<#list controllerNodes as controller>
{
"name": "${controller.description}",
"item": [
<#list controller.requestNodes as reqNode>
{
"name": "${reqNode.description}",
"request": {
"url": {
"raw": "{{domain}}${reqNode.url}",
"query": [
<#if reqNode.paramNodes?size != 0>
<#list reqNode.paramNodes as paramNode>
{
"key": "${paramNode.name}",
"value": "",
"description": "${paramNode.description}"
}<#if paramNode_has_next>,</#if>
</#list>
</#if>
]
}
}
}<#if reqNode_has_next>,</#if>
</#list>
]
}<#if controller_has_next>,</#if>
</#list>
]
}

@ -0,0 +1,34 @@
# true 值支持热加载
undertow.devMode=true
undertow.port=8002
undertow.host=0.0.0.0
# 目录名称
undertow.contextPath=/dsRes
# 设定I/O线程数.
server.undertow.io-threads=8
# 设定工作线程数
server.undertow.worker-threads=60
# 查询当前某程序的线程或进程数
# yum install psmisc -y
# ps -e | grep java | awk '{print $1}
# pstree -p 15453 | wc -l
# gzip 压缩开关
undertow.gzip.enable=true
# 配置压缩级别,默认值 -1。 可配置 1 到 9。 1 拥有最快压缩速度9 拥有最高压缩率
undertow.gzip.level=-1
# 触发压缩的最小内容长度
undertow.gzip.minLength=1024
# 开启access日志
server.undertow.accesslog.enabled=true
server.undertow.accesslog.pattern=%t %a "%r" %s (%D ms)
# ssl 开启时,是否开启 http2。检测该配置是否生效在 chrome 地址栏中输入: chrome://net-internals/#http2
#undertow.http2.enable=true
#http://www.jfinal.com/doc/1-4
Loading…
Cancel
Save