From 03f2e1c66971860285db79b486587f79e156e277 Mon Sep 17 00:00:00 2001 From: tangwei Date: Fri, 8 May 2026 09:24:55 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=99=84=E4=BB=B6=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E5=8A=A0=E6=97=A5=E5=BF=97=EF=BC=8C=E5=B9=B6=E4=B8=94=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E4=B8=8A=E4=BC=A0=E5=9C=B0=E5=9D=80=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/FishDraftDataController.java | 3 + .../data/service/AttachmentUploadService.java | 95 ++++++++++++++----- .../service/impl/FishImportServiceImpl.java | 4 + .../src/main/resources/application-devtw.yml | 7 ++ .../src/main/resources/application-prod.yml | 5 + backend/src/main/resources/application.yml | 2 - 6 files changed, 90 insertions(+), 26 deletions(-) diff --git a/backend/src/main/java/com/yfd/platform/data/controller/FishDraftDataController.java b/backend/src/main/java/com/yfd/platform/data/controller/FishDraftDataController.java index d293f25..5a5d652 100644 --- a/backend/src/main/java/com/yfd/platform/data/controller/FishDraftDataController.java +++ b/backend/src/main/java/com/yfd/platform/data/controller/FishDraftDataController.java @@ -137,13 +137,16 @@ public class FishDraftDataController { ImportTask importTask = importTaskService.getById(taskId); String resultJson = importTask.getResultJson(); FishImportResult importResult = null; + log.info("==============批量保存草稿================: {}", taskId); if (resultJson != null && !resultJson.isEmpty()) { try { importResult = objectMapper.readValue(resultJson, FishImportResult.class); ZipFileUtil.ZipContent content = new ZipFileUtil.ZipContent(); content.images = importResult.getImageFiles(); content.videos = importResult.getVideoFiles(); + log.info("==============processAttachments前================: {}", taskId); fishImportService.processAttachments(importResult, content); + log.info("==============processAttachments后================: {}", taskId); } catch (Exception e) { e.printStackTrace(); // ignore parse error diff --git a/backend/src/main/java/com/yfd/platform/data/service/AttachmentUploadService.java b/backend/src/main/java/com/yfd/platform/data/service/AttachmentUploadService.java index 1cd11a4..bbfccc5 100644 --- a/backend/src/main/java/com/yfd/platform/data/service/AttachmentUploadService.java +++ b/backend/src/main/java/com/yfd/platform/data/service/AttachmentUploadService.java @@ -32,13 +32,16 @@ public class AttachmentUploadService { @Value("${attachment.token}") private String token; - // 定义一个固定的线程池用于文件上传(建议根据服务器性能调整核心线程数) + @Value("${attachment.upload-url}") + private String uploadUrl; + + @Value("${attachment.video-url}") + private String videoUrl; + private static final ExecutorService UPLOAD_EXECUTOR = new ThreadPoolExecutor( 5, 10, 60L, TimeUnit.SECONDS, new LinkedBlockingQueue<>(100), new ThreadPoolExecutor.CallerRunsPolicy() ); - private static final String UPLOAD_URL = "https://211.99.26.225:12125/upload"; - private static final String VIDEO_URL = "https://211.99.26.225:12125/upload"; private final HttpClient httpClient; @@ -68,32 +71,14 @@ public class AttachmentUploadService { System.arraycopy(footer.getBytes(), 0, body, header.getBytes().length + fileContent.length, footer.getBytes().length); try { - // 1. 创建信任所有证书的 TrustManager - TrustManager[] trustAllCerts = new TrustManager[]{ - new X509TrustManager() { - public void checkClientTrusted(X509Certificate[] chain, String authType) {} - public void checkServerTrusted(X509Certificate[] chain, String authType) {} - public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } - } - }; - - // 2. 初始化 SSLContext - SSLContext sc = SSLContext.getInstance("TLS"); - sc.init(null, trustAllCerts, new SecureRandom()); - - // 3. 构建支持 HTTPS 且忽略证书验证的 HttpClient - HttpClient secureClient = HttpClient.newBuilder() - .sslContext(sc) - .build(); - + log.info("开始上传文件:uploadUrl {}", uploadUrl); HttpRequest request = HttpRequest.newBuilder() - .uri(URI.create(UPLOAD_URL)) + .uri(URI.create(uploadUrl)) .header("Content-Type", "multipart/form-data; boundary=" + boundary) .POST(HttpRequest.BodyPublishers.ofByteArray(body)) .build(); - // 4. 使用新的 secureClient 发送请求 - HttpResponse response = secureClient.send(request, HttpResponse.BodyHandlers.ofString()); + HttpResponse response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); if (response.statusCode() == 200) { String responseBody = response.body(); @@ -109,6 +94,68 @@ public class AttachmentUploadService { } +// public String uploadFile(File file) throws IOException, InterruptedException { +// if (file == null || !file.exists()) { +// log.warn("文件不存在或为空: {}", file); +// return null; +// } +// +// String boundary = "----FormBoundary" + System.currentTimeMillis(); +// byte[] fileContent = Files.readAllBytes(file.toPath()); +// String fileName = file.getName(); +// +// String header = "--" + boundary + "\r\n" + +// "Content-Disposition: form-data; name=\"file\"; filename=\"" + fileName + "\"\r\n" + +// "Content-Type: application/octet-stream\r\n\r\n"; +// String footer = "\r\n--" + boundary + "--\r\n"; +// +// byte[] body = new byte[header.getBytes().length + fileContent.length + footer.getBytes().length]; +// System.arraycopy(header.getBytes(), 0, body, 0, header.getBytes().length); +// System.arraycopy(fileContent, 0, body, header.getBytes().length, fileContent.length); +// System.arraycopy(footer.getBytes(), 0, body, header.getBytes().length + fileContent.length, footer.getBytes().length); +// +// try { +// // 1. 创建信任所有证书的 TrustManager +// TrustManager[] trustAllCerts = new TrustManager[]{ +// new X509TrustManager() { +// public void checkClientTrusted(X509Certificate[] chain, String authType) {} +// public void checkServerTrusted(X509Certificate[] chain, String authType) {} +// public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } +// } +// }; +// +// // 2. 初始化 SSLContext +// SSLContext sc = SSLContext.getInstance("TLS"); +// sc.init(null, trustAllCerts, new SecureRandom()); +// +// // 3. 构建支持 HTTPS 且忽略证书验证的 HttpClient +// HttpClient secureClient = HttpClient.newBuilder() +// .sslContext(sc) +// .build(); +// +// HttpRequest request = HttpRequest.newBuilder() +// .uri(URI.create(uploadUrl)) +// .header("Content-Type", "multipart/form-data; boundary=" + boundary) +// .POST(HttpRequest.BodyPublishers.ofByteArray(body)) +// .build(); +// +// // 4. 使用新的 secureClient 发送请求 +// HttpResponse response = secureClient.send(request, HttpResponse.BodyHandlers.ofString()); +// +// if (response.statusCode() == 200) { +// String responseBody = response.body(); +// return parseAttachmentId(responseBody); +// } else { +// log.error("上传文件失败: {}, 状态码: {}", fileName, response.statusCode()); +// return null; +// } +// } catch (Exception e) { +// log.error("文件上传过程中发生异常: {}", e.getMessage(), e); +// return null; +// } +// } + + /** * 多线程批量上传文件 * @param files 文件列表 diff --git a/backend/src/main/java/com/yfd/platform/data/service/impl/FishImportServiceImpl.java b/backend/src/main/java/com/yfd/platform/data/service/impl/FishImportServiceImpl.java index 43b7fcc..3f7b6c2 100644 --- a/backend/src/main/java/com/yfd/platform/data/service/impl/FishImportServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/data/service/impl/FishImportServiceImpl.java @@ -1301,7 +1301,9 @@ public class FishImportServiceImpl implements IFishImportService { fileMap.put("name", fileName); if (actualPath != null) { try { + log.info("开始上传视频文件: {}" ,actualPath); String attachmentId = attachmentUploadService.uploadFileAndGetId(actualPath); + log.info("开始上传视频文件后:{}attachmentId{} " ,actualPath,attachmentId); if (attachmentId != null) { attachmentIds.add(attachmentId); fileMap.put("value", attachmentId); @@ -1341,7 +1343,9 @@ public class FishImportServiceImpl implements IFishImportService { String actualPath = findFilePath(fileName, imageMap); if (actualPath != null) { try { + log.info("开始上传图片文件: {}" ,actualPath); String attachmentId = attachmentUploadService.uploadFileAndGetId(actualPath); + log.info("开始上传图片文件后:{}attachmentId{} " ,actualPath,attachmentId); if (attachmentId != null) { attachmentIds.add(attachmentId); fileMap.put("value", attachmentId); diff --git a/backend/src/main/resources/application-devtw.yml b/backend/src/main/resources/application-devtw.yml index 54a6258..8ec93c1 100644 --- a/backend/src/main/resources/application-devtw.yml +++ b/backend/src/main/resources/application-devtw.yml @@ -117,3 +117,10 @@ task: keep-alive-seconds: 60 # 队列容量 queue-capacity: 50 + +attachment: + token: ${ATTACHMENT_TOKEN:qgcBkod25ngBa4wu8BtfCPYsJ7lQGVDoexH} + upload-url: ${ATTACHMENT_UPLOAD_URL:http://172.16.31.185:18200/upload} + video-url: ${ATTACHMENT_VIDEO_URL:http://172.16.31.185:18200/upload} +# upload-url: ${ATTACHMENT_UPLOAD_URL:https://211.99.26.225:12125/upload} +# video-url: ${ATTACHMENT_VIDEO_URL:https://211.99.26.225:12125/upload} \ No newline at end of file diff --git a/backend/src/main/resources/application-prod.yml b/backend/src/main/resources/application-prod.yml index f4bdc6c..7cadaa4 100644 --- a/backend/src/main/resources/application-prod.yml +++ b/backend/src/main/resources/application-prod.yml @@ -117,3 +117,8 @@ task: keep-alive-seconds: 60 # 队列容量 queue-capacity: 50 + +attachment: + token: ${ATTACHMENT_TOKEN:qgcBkod25ngBa4wu8BtfCPYsJ7lQGVDoexH} + upload-url: ${ATTACHMENT_UPLOAD_URL:http://172.16.31.185:18200/upload} + video-url: ${ATTACHMENT_VIDEO_URL:http://172.16.31.185:18200/upload} \ No newline at end of file diff --git a/backend/src/main/resources/application.yml b/backend/src/main/resources/application.yml index b11a8a0..d8e6c7e 100644 --- a/backend/src/main/resources/application.yml +++ b/backend/src/main/resources/application.yml @@ -40,5 +40,3 @@ springdoc: path: /swagger-ui.html packages-to-scan: com.yfd.platform -attachment: - token: ${ATTACHMENT_TOKEN:qgcBkod25ngBa4wu8BtfCPYsJ7lQGVDoexH} \ No newline at end of file