Browse Source

优化

ftpmain
wang 1 month ago
parent
commit
7afae4a446
  1. 5
      config/application-external.yml
  2. 3
      src/main/java/com/threecloud/dataserviceyy/service/FtpSyncService.java
  3. 38
      src/main/java/com/threecloud/dataserviceyy/util/FileUploadUtil.java

5
config/application-external.yml

@ -34,9 +34,10 @@ ftp-sync:
# 字段分隔符(老系统用※)
field-separator: "※"
# OSS 文件上传配置
# ============================== OSS文件存储服务 =======================
oss:
base-url: http://53.1.211.7/apiOss
base-url: http://53.1.211.7:8090
upload-path: voice/record/
# 地市FTP配置(每个地市独立部署一份,只配当前地市即可)
cities:

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

@ -163,7 +163,8 @@ public class FtpSyncService {
}
} catch (Exception e) {
fileFail++;
logger.error("【FTP地市】处理文件失败: {}, 原因={}", fileName, e.getMessage());
logger.error("【FTP地市】处理文件严重失败: {}, 原因={}。将终止本轮同步以防止连接断开导致后续文件持续报错。", fileName, e.getMessage());
break;
}
}
logger.info("【FTP地市】{} 同步完成: 成功{}个文件, 跳过{}个(已处理), 失败{}个文件",

38
src/main/java/com/threecloud/dataserviceyy/util/FileUploadUtil.java

@ -33,7 +33,7 @@ public class FileUploadUtil {
private static final Logger logger = LoggerFactory.getLogger(FileUploadUtil.class);
@Value("${ftp-sync.oss.base-url:http://53.1.211.7/apiOss}")
@Value("${ftp-sync.oss.base-url:http://53.1.211.7:8090}")
private String ossBaseUrl;
private RestTemplate restTemplate;
@ -57,6 +57,12 @@ public class FileUploadUtil {
*/
public String uploadWav(String ossPath, String fileName, byte[] fileData) {
String path = "voice/" + ossPath;
if (fileName != null && !fileName.isEmpty() && path.endsWith(fileName)) {
path = path.substring(0, path.length() - fileName.length());
}
if (path.endsWith("/")) {
path = path.substring(0, path.length() - 1);
}
logger.debug("上传文件到OSS, path={}, 大小={} bytes", path, fileData.length);
try {
@ -76,21 +82,39 @@ public class FileUploadUtil {
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(body, headers);
ResponseEntity<ResultEntity> response = restTemplate.exchange(
ResponseEntity<String> response = restTemplate.exchange(
ossBaseUrl + "/oss/upload",
HttpMethod.POST,
requestEntity,
ResultEntity.class
String.class
);
if (response.getStatusCode().is2xxSuccessful() && response.getBody() != null) {
ResultEntity result = response.getBody();
if (result.getCode() == ResultEntity.StatusCode.SUCCESS.getCode()) {
String responseBody = response.getBody();
logger.info("文件上传响应原始数据: {}", responseBody);
// 优先检查是否直接返回了包含 fileUrl 或 url 的对象(兼容扁平格式)
if (responseBody.trim().startsWith("{")) {
try {
Map<?, ?> map = JSON.parseObject(responseBody, Map.class);
if (map != null && (map.containsKey("fileUrl") || map.containsKey("url"))) {
String fileUrl = parseFileUrl(responseBody);
logger.info("文件上传完成 (扁平格式), URL: {}", fileUrl);
return fileUrl;
}
} catch (Exception e) {
logger.debug("尝试直接解析为Map失败: {}", e.getMessage());
}
}
// 否则按照 ResultEntity 包装格式解析(兼容旧包装格式)
ResultEntity result = JSON.parseObject(responseBody, ResultEntity.class);
if (result != null && result.getCode() != null && result.getCode() == ResultEntity.StatusCode.SUCCESS.getCode()) {
String fileUrl = parseFileUrl(result.getContent());
logger.info("文件上传完成, URL: {}", fileUrl);
logger.info("文件上传完成 (包装格式), URL: {}", fileUrl);
return fileUrl;
} else {
throw new RuntimeException("上传失败, code=" + result.getCode() + ", msg=" + result.getMsg());
throw new RuntimeException("上传失败, 原始响应=" + responseBody + ", code=" + (result != null ? result.getCode() : "null") + ", msg=" + (result != null ? result.getMsg() : "null"));
}
} else {
throw new RuntimeException("上传失败, HTTP状态码: " + response.getStatusCode());

Loading…
Cancel
Save