Browse Source

优化上传

ftpmain
wang 2 months ago
parent
commit
a83572f109
  1. 8
      README.md
  2. 35
      config/application-external.yml
  3. 2
      pom.xml
  4. 38
      src/main/java/com/threecloud/dataserviceyy/service/FtpSyncService.java

8
README.md

@ -157,14 +157,14 @@ ftp-sync:
ftp-port: 9979
ftp-username: ftpuser
ftp-password: ftppass
ftp-source-dir: /340100/record/ # txt目录
ftp-record-dir: /340100/recordfile/ # mp3目录
ftp-archive-dir: /340100/processed/ # 归档目录
ftp-source-dir: /record/ # txt目录
ftp-record-dir: /recordfile/ # mp3目录
ftp-archive-dir: /processed/ # 归档目录
vaa-sync:
oss:
base-url: http://你的OSS地址:9090
upload-url: http://你的OSS地址:9090/apiOss/oss/fileUpload
upload-url: http://你的OSS地址:9090/apiOss/oss/noAuthFileUploadSingle
appcode: dataservice-yy
appid: 你的appid
appsecret: 你的appsecret

35
config/application-external.yml

@ -14,29 +14,7 @@ spring:
driver-class-name: com.kingbase8.Driver
url: jdbc:kingbase8://127.0.0.1:54321/kingbase?currentSchema=mid_voice&clientEncoding=utf8
username: dcms_dev
password: your_password_here
# ==================== 语音同步配置 ====================
vaa-sync:
# 本地录音文件存储路径
download-path: ./vaa-recordings
# 本地文件保留天数
retain-days: 10
# 同步定时任务 Cron 表达式
# 每2小时: 0 0 0/2 * * ?
# 每30分钟: 0 0/30 * * * ?
# 每分钟(测试): 0 0/1 * * * ?
sync-interval-cron: "0 0 0/2 * * ?"
# OSS 文件上传配置
oss:
base-url: http://127.0.0.1:9090
upload-url: http://127.0.0.1:9090/apiOss/oss/fileUpload
appcode: dataservice-yy
appid: your_appid_here
appsecret: your_appsecret_here
password: your_password_hereq
# ==================== FTP同步配置(单地市部署) ====================
# 【说明】每个地市单独部署本服务,配置只需要写一个地市
@ -56,6 +34,17 @@ ftp-sync:
# 字段分隔符(老系统用※)
field-separator: "※"
# OSS 文件上传配置
oss:
base-url: http://127.0.0.1:9090
upload-url: http://127.0.0.1:9090/apiOss/oss/noAuthFileUploadSingle
# 应用编码可以不写
appcode: dataservice-yy
# 应用ID(部署时改为真实值)
appid: your_appid_here
# 应用密钥(部署时改为真实值)
appsecret: your_appsecret_here
# 当前部署的地市FTP配置(每个地市独立部署一份)
cities:
- city-code: "340100"

2
pom.xml

@ -7,7 +7,7 @@
<groupId>com.threecloud</groupId>
<artifactId>dataservice-yy</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>dataservice-ftp</name>
<name>dataservice-yy</name>
<description>数据同步服务</description>
<properties>

38
src/main/java/com/threecloud/dataserviceyy/service/FtpSyncService.java

@ -165,7 +165,7 @@ public class FtpSyncService {
private boolean processTxtFile(FTPClient ftp, FTPFile file, FtpCityConfig city,
Set<String> existingIds) throws Exception {
String fileName = file.getName();
String sourcePath = city.getFtpSourceDir() + "/" + fileName;
String sourcePath = joinPath(city.getFtpSourceDir(), fileName);
logger.info("【FTP文件】开始处理: {}", fileName);
byte[] txtBytes = FtpUtil.downloadFile(ftp, sourcePath);
@ -200,7 +200,7 @@ public class FtpSyncService {
// 移动到归档目录
try {
String archivePath = city.getFtpArchiveDir() + "/" + fileName;
String archivePath = joinPath(city.getFtpArchiveDir(), fileName);
FtpUtil.ensureDir(ftp, city.getFtpArchiveDir());
FtpUtil.rename(ftp, sourcePath, archivePath);
logger.info("【FTP文件】已归档: {} -> {}", sourcePath, archivePath);
@ -275,7 +275,7 @@ public class FtpSyncService {
String ossPath = FilePathUtil.buildOssPath(city.getCityCode(), callStartTime, recordFileName);
// 下载录音文件(FTP路径:{ftp-record-dir}/{yyyyMMdd}/{filename})
String remoteRecordPath = city.getFtpRecordDir() + "/" + dateStr + "/" + recordFileName;
String remoteRecordPath = joinPath(city.getFtpRecordDir(), dateStr, recordFileName);
byte[] recordBytes = FtpUtil.downloadFile(ftp, remoteRecordPath);
logger.info("【FTP行】下载录音: {} ({} 字节)", recordFileName, recordBytes.length);
@ -373,4 +373,36 @@ public class FtpSyncService {
return defaultValue;
}
}
/**
* 拼接FTP路径自动处理末尾斜杠避免双斜杠
*
* @param parts 路径片段
* @return 拼接后的路径使用正斜杠FTP标准路径分隔符
*/
private String joinPath(String... parts) {
if (parts == null || parts.length == 0) {
return "";
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < parts.length; i++) {
String part = parts[i];
if (part == null || part.isEmpty()) {
continue;
}
// 去掉末尾的斜杠(除了最后一个片段且本身就是斜杠的情况)
if (part.endsWith("/") && i < parts.length - 1) {
part = part.substring(0, part.length() - 1);
}
// 去掉开头的斜杠(除了第一个片段)
if (i > 0 && part.startsWith("/")) {
part = part.substring(1);
}
if (sb.length() > 0) {
sb.append("/");
}
sb.append(part);
}
return sb.toString();
}
}

Loading…
Cancel
Save