diff --git a/src/main/java/com/genersoft/iot/vmp/aiot/controller/AiRoiController.java b/src/main/java/com/genersoft/iot/vmp/aiot/controller/AiRoiController.java index 2d5a74096..7c5c60f86 100644 --- a/src/main/java/com/genersoft/iot/vmp/aiot/controller/AiRoiController.java +++ b/src/main/java/com/genersoft/iot/vmp/aiot/controller/AiRoiController.java @@ -15,6 +15,8 @@ import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; import java.util.List; import java.util.Map; @@ -88,22 +90,21 @@ public class AiRoiController { public ResponseEntity getSnap( @RequestParam String cameraCode, @RequestParam(defaultValue = "false") boolean force, - @RequestHeader(value = "Accept", defaultValue = "application/json") String accept) { + @RequestHeader(value = "Accept", defaultValue = "application/json") String accept, + HttpServletResponse httpResponse) throws IOException { Map result = screenshotService.requestScreenshot(cameraCode, force); - // 如果是 标签发起的请求(Accept: image/*),直接返回图片字节 + // 标签请求(Accept: image/*):302 重定向到 COS 公共 URL if (accept.contains("image/") && "ok".equals(result.get("status"))) { - byte[] image = screenshotService.proxyScreenshotImage(cameraCode); - if (image != null) { - return ResponseEntity.ok() - .contentType(MediaType.IMAGE_JPEG) - .header("Cache-Control", "max-age=60") - .body(image); + String cosUrl = (String) result.get("url"); + if (cosUrl != null && cosUrl.startsWith("https://")) { + httpResponse.sendRedirect(cosUrl); + return null; } } - // 默认返回 JSON(XHR/fetch 请求) + // JSON 请求(XHR/fetch):返回 JSON return ResponseEntity.ok(result); }