actorref(record): 优化文件类型检测和响应处理

- 在 RecordBusbarTempController 和 RecordInspectionCabinetController 中增加了文件类型动态检测逻辑
- 根据文件实际类型设置 HTTP 响应的 Content-Type 头
- 修复了文件不存在时返回 null 的问题,改为返回 404状态
- 优化了代码结构,提高了可维护性和可读性
IOT
zch 1 year ago
parent 665d2eca09
commit 1436004ffa

@ -1,6 +1,8 @@
package com.ruoyi.record.controller; package com.ruoyi.record.controller;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.List; import java.util.List;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
@ -120,7 +122,7 @@ public class RecordBusbarTempController extends BaseController
// 获取配置文件中的路径application.yml的profile // 获取配置文件中的路径application.yml的profile
String myPath = RuoYiConfig.getProfile(); String myPath = RuoYiConfig.getProfile();
// 构建文件的完整路径 // 构建文件的完整路径
String fileUrl = myPath + "/日志信息/红外热成像/" + filePath; String fileUrl = myPath + "/日志信息/可见光图像/" + filePath;
// 创建文件对象 // 创建文件对象
File file = new File(fileUrl); File file = new File(fileUrl);
// 检查文件是否存在 // 检查文件是否存在
@ -129,17 +131,30 @@ public class RecordBusbarTempController extends BaseController
FileSystemResource resource = new FileSystemResource(file); FileSystemResource resource = new FileSystemResource(file);
// 创建HttpHeaders对象用于设置响应头 // 创建HttpHeaders对象用于设置响应头
HttpHeaders headers = new HttpHeaders(); HttpHeaders headers = new HttpHeaders();
// 设置媒体类型为图片jpg格式 // 设置文件长度
headers.setContentType(MediaType.parseMediaType("image/jpg"));
headers.setContentLength(file.length()); 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() return ResponseEntity.ok()
.headers(headers) .headers(headers)
.body(resource); .body(resource);
} else { } else {
// 如果文件不存在返回null注释掉的代码是返回404状态 // 如果文件不存在返回404状态
/* return ResponseEntity.notFound().build(); */ return ResponseEntity.notFound().build();
return null;
} }
} }
@ -153,7 +168,7 @@ public class RecordBusbarTempController extends BaseController
// 获取配置文件中的路径application.yml的profile // 获取配置文件中的路径application.yml的profile
String myPath = RuoYiConfig.getProfile(); String myPath = RuoYiConfig.getProfile();
// 构建完整的文件路径 // 构建完整的文件路径
String fileUrl = myPath + "/日志信息/可见光图像/" + filePath; String fileUrl = myPath + "/日志信息/红外热成像/" + filePath;
// 创建文件对象 // 创建文件对象
File file = new File(fileUrl); File file = new File(fileUrl);
// 检查文件是否存在 // 检查文件是否存在
@ -162,17 +177,30 @@ public class RecordBusbarTempController extends BaseController
FileSystemResource resource = new FileSystemResource(file); FileSystemResource resource = new FileSystemResource(file);
// 创建HTTP头对象 // 创建HTTP头对象
HttpHeaders headers = new HttpHeaders(); HttpHeaders headers = new HttpHeaders();
// 设置媒体类型为图片jpg格式 // 设置文件长度
headers.setContentType(MediaType.parseMediaType("image/jpg"));
headers.setContentLength(file.length()); 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() return ResponseEntity.ok()
.headers(headers) .headers(headers)
.body(resource); .body(resource);
} else { } else {
// 如果文件不存在返回null注释掉的代码是返回404状态 // 如果文件不存在返回404状态
/* return ResponseEntity.notFound().build(); */ return ResponseEntity.notFound().build();
return null;
} }
} }

@ -2,6 +2,7 @@ package com.ruoyi.record.controller;
import java.io.IOException; import java.io.IOException;
import java.io.RandomAccessFile; import java.io.RandomAccessFile;
import java.nio.file.Files;
import java.util.List; import java.util.List;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
@ -142,15 +143,24 @@ public class RecordInspectionCabinetController extends BaseController
HttpHeaders headers = new HttpHeaders(); HttpHeaders headers = new HttpHeaders();
// 设置文件长度的内容类型 // 设置文件长度的内容类型
headers.setContentLength(file.length()); headers.setContentLength(file.length());
// 解析媒体类型并设置内容类型为视频MP4 // 动态检测文件的MIME类型
headers.setContentType(MediaType.parseMediaType("video/mp4")); 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() return ResponseEntity.ok()
.headers(headers) .headers(headers)
.body(resource); .body(resource);
} else { } else {
// 如果文件不存在返回null // 如果文件不存在,返回404状态
return null; return ResponseEntity.notFound().build();
} }
} }
@ -175,15 +185,25 @@ public class RecordInspectionCabinetController extends BaseController
HttpHeaders headers = new HttpHeaders(); HttpHeaders headers = new HttpHeaders();
// 设置文件长度 // 设置文件长度
headers.setContentLength(file.length()); headers.setContentLength(file.length());
// 解析媒体类型并设置内容类型为视频MP4 // 动态检测文件的MIME类型
headers.setContentType(MediaType.parseMediaType("video/mp4")); 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() return ResponseEntity.ok()
.headers(headers) .headers(headers)
.body(resource); .body(resource);
} else { } else {
// 如果文件不存在返回null注释掉的代码是返回404状态 // 如果文件不存在,返回404状态
return null; return ResponseEntity.notFound().build();
} }
} }
} }

Loading…
Cancel
Save