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

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

@ -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 null404
*/
@GetMapping("/getThermalPhoto/{filePath}")
public ResponseEntity<FileSystemResource> getThermalPhoto(@PathVariable String filePath) {
public ResponseEntity<FileSystemResource> 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();
}
}

@ -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<FileSystemResource>
*/
@GetMapping("/getVisibleVideo/{filePath}")
public ResponseEntity<FileSystemResource> 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<FileSystemResource>
*/
@GetMapping("/getVisibleVideo/{filePath}")
public ResponseEntity<FileSystemResource> 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();
}
}
}

Loading…
Cancel
Save