From 1436004ffa9af1f93288583a9987c772f346bf4a Mon Sep 17 00:00:00 2001 From: zch Date: Fri, 15 Nov 2024 09:57:37 +0800 Subject: [PATCH] =?UTF-8?q?actorref(record):=20=E4=BC=98=E5=8C=96=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E7=B1=BB=E5=9E=8B=E6=A3=80=E6=B5=8B=E5=92=8C=E5=93=8D?= =?UTF-8?q?=E5=BA=94=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 RecordBusbarTempController 和 RecordInspectionCabinetController 中增加了文件类型动态检测逻辑 - 根据文件实际类型设置 HTTP 响应的 Content-Type 头 - 修复了文件不存在时返回 null 的问题,改为返回 404状态 - 优化了代码结构,提高了可维护性和可读性 --- .../RecordBusbarTempController.java | 56 +++++++++--- .../RecordInspectionCabinetController.java | 88 ++++++++++++------- 2 files changed, 96 insertions(+), 48 deletions(-) diff --git a/ruoyi-module/src/main/java/com/ruoyi/record/controller/RecordBusbarTempController.java b/ruoyi-module/src/main/java/com/ruoyi/record/controller/RecordBusbarTempController.java index 28a601d..718b249 100644 --- a/ruoyi-module/src/main/java/com/ruoyi/record/controller/RecordBusbarTempController.java +++ b/ruoyi-module/src/main/java/com/ruoyi/record/controller/RecordBusbarTempController.java @@ -1,6 +1,8 @@ package com.ruoyi.record.controller; import java.io.File; +import java.io.IOException; +import java.nio.file.Files; import java.util.List; import javax.servlet.http.HttpServletResponse; @@ -120,7 +122,7 @@ public class RecordBusbarTempController extends BaseController // 获取配置文件中的路径application.yml的profile String myPath = RuoYiConfig.getProfile(); // 构建文件的完整路径 - String fileUrl = myPath + "/日志信息/红外热成像/" + filePath; + String fileUrl = myPath + "/日志信息/可见光图像/" + filePath; // 创建文件对象 File file = new File(fileUrl); // 检查文件是否存在 @@ -129,17 +131,30 @@ public class RecordBusbarTempController extends BaseController FileSystemResource resource = new FileSystemResource(file); // 创建HttpHeaders对象,用于设置响应头 HttpHeaders headers = new HttpHeaders(); - // 设置媒体类型为图片jpg格式 - headers.setContentType(MediaType.parseMediaType("image/jpg")); + // 设置文件长度 headers.setContentLength(file.length()); - // 返回包含文件资源的ResponseEntity对象 + // 动态检测文件的MIME类型 + try { + // 尝试获取文件的内容类型 + String contentType = Files.probeContentType(file.toPath()); + if (contentType != null) { + // 如果内容类型不为空,则设置到HTTP响应头中 + headers.setContentType(MediaType.parseMediaType(contentType)); + } else { + // 如果内容类型为空,则默认设置为图像类型 + headers.setContentType(MediaType.parseMediaType("image/*")); + } + } catch (IOException e) { + // 如果发生IO异常,则默认设置内容类型为图像类型 + headers.setContentType(MediaType.parseMediaType("image/*")); + } + // 返回包含文件资源的响应实体 return ResponseEntity.ok() .headers(headers) .body(resource); } else { - // 如果文件不存在,返回null(注释掉的代码是返回404状态) - /* return ResponseEntity.notFound().build(); */ - return null; + // 如果文件不存在,返回404状态 + return ResponseEntity.notFound().build(); } } @@ -149,11 +164,11 @@ public class RecordBusbarTempController extends BaseController * @return 如果文件存在,返回包含文件资源的响应实体;如果文件不存在,返回null(注释掉的代码是返回404状态)。 */ @GetMapping("/getThermalPhoto/{filePath}") - public ResponseEntity getThermalPhoto(@PathVariable String filePath) { + public ResponseEntity getThermalPhoto (@PathVariable String filePath) { // 获取配置文件中的路径application.yml的profile String myPath = RuoYiConfig.getProfile(); // 构建完整的文件路径 - String fileUrl = myPath + "/日志信息/可见光图像/" + filePath; + String fileUrl = myPath + "/日志信息/红外热成像/" + filePath; // 创建文件对象 File file = new File(fileUrl); // 检查文件是否存在 @@ -162,17 +177,30 @@ public class RecordBusbarTempController extends BaseController FileSystemResource resource = new FileSystemResource(file); // 创建HTTP头对象 HttpHeaders headers = new HttpHeaders(); - // 设置媒体类型为图片jpg格式 - headers.setContentType(MediaType.parseMediaType("image/jpg")); + // 设置文件长度 headers.setContentLength(file.length()); + // 动态检测文件的MIME类型 + try { + // 尝试获取文件的内容类型 + String contentType = Files.probeContentType(file.toPath()); + if (contentType != null) { + // 如果内容类型不为空,则设置到HTTP响应头中 + headers.setContentType(MediaType.parseMediaType(contentType)); + } else { + // 如果内容类型为空,则默认设置为图像类型 + headers.setContentType(MediaType.parseMediaType("image/*")); + } + } catch (IOException e) { + // 如果发生IO异常,则默认设置内容类型为图像类型 + headers.setContentType(MediaType.parseMediaType("image/*")); + } // 返回包含文件资源的响应实体 return ResponseEntity.ok() .headers(headers) .body(resource); } else { - // 如果文件不存在,返回null(注释掉的代码是返回404状态) - /* return ResponseEntity.notFound().build(); */ - return null; + // 如果文件不存在,返回404状态 + return ResponseEntity.notFound().build(); } } diff --git a/ruoyi-module/src/main/java/com/ruoyi/record/controller/RecordInspectionCabinetController.java b/ruoyi-module/src/main/java/com/ruoyi/record/controller/RecordInspectionCabinetController.java index a8a05b1..d0d168b 100644 --- a/ruoyi-module/src/main/java/com/ruoyi/record/controller/RecordInspectionCabinetController.java +++ b/ruoyi-module/src/main/java/com/ruoyi/record/controller/RecordInspectionCabinetController.java @@ -2,6 +2,7 @@ package com.ruoyi.record.controller; import java.io.IOException; import java.io.RandomAccessFile; +import java.nio.file.Files; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -142,48 +143,67 @@ public class RecordInspectionCabinetController extends BaseController HttpHeaders headers = new HttpHeaders(); // 设置文件长度的内容类型 headers.setContentLength(file.length()); - // 解析媒体类型并设置内容类型为视频MP4 - headers.setContentType(MediaType.parseMediaType("video/mp4")); + // 动态检测文件的MIME类型 + try { + String contentType = Files.probeContentType(file.toPath()); + if (contentType != null) { + headers.setContentType(MediaType.parseMediaType(contentType)); + } else { + headers.setContentType(MediaType.parseMediaType("video/*")); + } + } catch (IOException e) { + headers.setContentType(MediaType.parseMediaType("video/*")); + } // 返回包含文件资源的响应实体 return ResponseEntity.ok() .headers(headers) .body(resource); } else { - // 如果文件不存在,返回null - return null; + // 如果文件不存在,返回404状态 + return ResponseEntity.notFound().build(); } } - /** - * 处理GET请求,返回指定路径的视频文件。 - * @param filePath 视频文件的路径 - * @return ResponseEntity 包含视频文件资源的响应实体 - */ - @GetMapping("/getVisibleVideo/{filePath}") - public ResponseEntity getVisibleVideo(@PathVariable String filePath) { - // 获取配置文件中的路径application.yml的profile - String myPath = RuoYiConfig.getProfile(); - // 构建完整的文件路径 - String fileUrl = myPath + "/日志信息/巡检录像/可见光/" + filePath; - // 创建文件对象 - File file = new File(fileUrl); - // 检查文件是否存在 - if (file.exists()) { - // 如果文件存在,创建文件系统资源对象 - FileSystemResource resource = new FileSystemResource(file); - // 设置HTTP头信息 - HttpHeaders headers = new HttpHeaders(); - // 设置文件长度 - headers.setContentLength(file.length()); - // 解析媒体类型并设置内容类型为视频MP4 - headers.setContentType(MediaType.parseMediaType("video/mp4")); - // 返回包含文件资源的响应实体 - return ResponseEntity.ok() - .headers(headers) - .body(resource); - } else { - // 如果文件不存在,返回null(注释掉的代码是返回404状态) - return null; +/** + * 处理GET请求,返回指定路径的视频文件。 + * @param filePath 视频文件的路径 + * @return ResponseEntity 包含视频文件资源的响应实体 + */ +@GetMapping("/getVisibleVideo/{filePath}") +public ResponseEntity getVisibleVideo(@PathVariable String filePath) { + // 获取配置文件中的路径application.yml的profile + String myPath = RuoYiConfig.getProfile(); + // 构建完整的文件路径 + String fileUrl = myPath + "/日志信息/巡检录像/可见光/" + filePath; + // 创建文件对象 + File file = new File(fileUrl); + // 检查文件是否存在 + if (file.exists()) { + // 如果文件存在,创建文件系统资源对象 + FileSystemResource resource = new FileSystemResource(file); + // 设置HTTP头信息 + HttpHeaders headers = new HttpHeaders(); + // 设置文件长度 + headers.setContentLength(file.length()); + // 动态检测文件的MIME类型 + try { + String contentType = Files.probeContentType(file.toPath()); + if (contentType != null) { + headers.setContentType(MediaType.parseMediaType(contentType)); + } else { + headers.setContentType(MediaType.parseMediaType("video/*")); + } + } catch (IOException e) { + headers.setContentType(MediaType.parseMediaType("video/*")); } + // 返回包含文件资源的响应实体 + return ResponseEntity.ok() + .headers(headers) + .body(resource); + } else { + // 如果文件不存在,返回404状态 + return ResponseEntity.notFound().build(); } } + +}