From 2b0a682b3f5519a66a6de3204bd033549a59911e Mon Sep 17 00:00:00 2001
From: 16337 <1633794139@qq.com>
Date: Sat, 28 Feb 2026 15:16:29 +0800
Subject: [PATCH] =?UTF-8?q?fix(aiot):=20=E6=94=B9=E7=94=A8COS=E5=85=AC?=
=?UTF-8?q?=E5=85=B1URL+=E4=BF=AE=E5=A4=8DGlobalResponseAdvice=E6=8E=92?=
=?UTF-8?q?=E9=99=A4byte[]?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
1. requestScreenshot直接返回COS公共URL(不再返回代理路径)
2. GlobalResponseAdvice排除byte[]类型响应,避免图片代理被包装成WVPResult
3. handleCallback先写缓存再complete Future(保留之前的竞态修复)
COS Bucket已开启公有读,无需签名URL,直接用公共地址即可在
中显示。
Co-Authored-By: Claude Opus 4.6
---
.../vmp/aiot/service/impl/AiScreenshotServiceImpl.java | 8 ++++----
.../com/genersoft/iot/vmp/conf/GlobalResponseAdvice.java | 5 +++++
2 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/aiot/service/impl/AiScreenshotServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/aiot/service/impl/AiScreenshotServiceImpl.java
index 129f95539..62f7821f6 100644
--- a/src/main/java/com/genersoft/iot/vmp/aiot/service/impl/AiScreenshotServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/aiot/service/impl/AiScreenshotServiceImpl.java
@@ -56,7 +56,7 @@ public class AiScreenshotServiceImpl implements IAiScreenshotService {
try {
JSONObject cached = JSON.parseObject(cacheJson);
result.put("status", "ok");
- result.put("url", "/api/ai/roi/snap/image?cameraCode=" + cameraCode);
+ result.put("url", cached.getString("url"));
result.put("cached", true);
log.info("[AI截图] 命中缓存: cameraCode={}", cameraCode);
return result;
@@ -101,7 +101,7 @@ public class AiScreenshotServiceImpl implements IAiScreenshotService {
String status = (String) callbackData.get("status");
result.put("status", status);
if ("ok".equals(status)) {
- result.put("url", "/api/ai/roi/snap/image?cameraCode=" + cameraCode);
+ result.put("url", callbackData.get("url"));
} else {
result.put("message", callbackData.get("message"));
}
@@ -115,7 +115,7 @@ public class AiScreenshotServiceImpl implements IAiScreenshotService {
JSONObject res = JSON.parseObject(resultJson);
result.put("status", res.getString("status"));
if ("ok".equals(res.getString("status"))) {
- result.put("url", "/api/ai/roi/snap/image?cameraCode=" + cameraCode);
+ result.put("url", res.getString("url"));
// 降级成功,写入缓存
writeCache(cameraCode, res.getString("url"));
} else {
@@ -135,7 +135,7 @@ public class AiScreenshotServiceImpl implements IAiScreenshotService {
try {
JSONObject cached = JSON.parseObject(staleCache);
result.put("status", "ok");
- result.put("url", "/api/ai/roi/snap/image?cameraCode=" + cameraCode);
+ result.put("url", cached.getString("url"));
result.put("stale", true);
return result;
} catch (Exception ignored) {
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/GlobalResponseAdvice.java b/src/main/java/com/genersoft/iot/vmp/conf/GlobalResponseAdvice.java
index 2db3bb528..18da00ea7 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/GlobalResponseAdvice.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/GlobalResponseAdvice.java
@@ -42,6 +42,11 @@ public class GlobalResponseAdvice implements ResponseBodyAdvice