From fd1383959b1ab79c26ca218938c7dd39b492d4c0 Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Thu, 17 Apr 2025 18:51:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8C=85=E5=A4=B4bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../baotou/entity/ProjectHomeManage.java | 4 ++ .../controller/UploadFileController.java | 68 +++++++++++++------ .../entity/ConcreteMonitorCurrentData.java | 3 +- .../xml/ConcreteMonitorCurrentDataMapper.xml | 2 - ...ConcreteMonitorCurrentDataServiceImpl.java | 1 + .../com/zhgd/xmgl/util/HikvisionUtil.java | 13 +++- 6 files changed, 65 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/zhgd/xmgl/modules/baotou/entity/ProjectHomeManage.java b/src/main/java/com/zhgd/xmgl/modules/baotou/entity/ProjectHomeManage.java index 04dda4d71..0912421d0 100644 --- a/src/main/java/com/zhgd/xmgl/modules/baotou/entity/ProjectHomeManage.java +++ b/src/main/java/com/zhgd/xmgl/modules/baotou/entity/ProjectHomeManage.java @@ -65,5 +65,9 @@ public class ProjectHomeManage implements Serializable { private java.lang.Integer type; @ApiModelProperty(value = "1作业文件2制度文件") private java.lang.Integer fileType; + @ApiModelProperty(value = "标题") + private java.lang.String title; + @ApiModelProperty(value = "图片或视频") + private java.lang.String picVideoUrl; } diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/UploadFileController.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/UploadFileController.java index b7136b722..374b0b700 100644 --- a/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/UploadFileController.java +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/UploadFileController.java @@ -24,8 +24,8 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.*; -import java.net.URL; -import java.net.URLConnection; +import java.net.*; +import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; import java.util.Objects; @@ -119,28 +119,54 @@ public class UploadFileController { @ApiImplicitParam(name = "fileUrl", value = "下载地址", paramType = "query", required = true, dataType = "String"), @ApiImplicitParam(name = "fileName", value = "修改名称", paramType = "query", required = true, dataType = "String") }) - public void getRenameFile(@RequestParam("fileUrl") String fileUrl, @RequestParam("fileName") String fileName, HttpServletResponse response) { + public void getRenameFile( + @RequestParam("fileUrl") String fileUrl, + @RequestParam("fileName") String fileName, + HttpServletResponse response) { try { - URL url = new URL(fileUrl); - int index = fileUrl.indexOf("?");//第一个问号的位置 - if (index > -1) { - fileUrl = fileUrl.substring(0, index); - } - String[] split = fileUrl.split("\\."); - // 不同文件的MimeType参考后续链接 - response.setContentType("application/x-download");//下面三行是关键代码,处理乱码问题 - response.setCharacterEncoding("utf-8"); - response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("utf-8"), "iso8859-1") + "." + split[split.length - 1]); + // 检查 fileName 有效性 +// if (fileName == null || fileName.isEmpty() || "undefined".equals(fileName)) { +// response.sendError(HttpServletResponse.SC_BAD_REQUEST, "文件名无效"); +// return; +// } + + // 解码客户端传递的 fileUrl(确保客户端已正确编码) + String decodedFileUrl = URLDecoder.decode(fileUrl, StandardCharsets.UTF_8.name()); + + // 再次编码路径中的特殊字符(处理空格、汉字等) + URI uri = new URI(decodedFileUrl.replace(" ", "%20")); // 显式替换空格为%20 + URL url = uri.toURL(); + + // 提取文件扩展名 + String[] split = decodedFileUrl.split("\\."); + String fileExtension = split.length > 1 ? split[split.length - 1] : ""; + + // 设置响应头 + response.setContentType("application/x-download"); + response.setCharacterEncoding("UTF-8"); + String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.name()) + .replace("+", "%20"); + String contentDisposition = String.format( + "attachment; filename=\"%s.%s\"; filename*=UTF-8''%s.%s", + encodedFileName, fileExtension, encodedFileName, fileExtension); + response.setHeader("Content-Disposition", contentDisposition); + + // 配置 URL 连接 URLConnection conn = url.openConnection(); - InputStream inStream = conn.getInputStream(); - OutputStream fos = response.getOutputStream(); - // 读取路径下面的文件 - FileCopyUtils.copy(inStream, fos); - response.getOutputStream().flush(); - response.getOutputStream().close(); - response.flushBuffer(); + conn.setRequestProperty("User-Agent", "Mozilla/5.0"); + + // 复制流到响应输出 + try (InputStream inStream = conn.getInputStream(); + OutputStream outStream = response.getOutputStream()) { + FileCopyUtils.copy(inStream, outStream); + } + + } catch (URISyntaxException e) { + log.error("URL 格式错误: {}", fileUrl, e); + response.setStatus(HttpServletResponse.SC_BAD_REQUEST); } catch (Exception e) { - log.error("err:", e); + log.error("下载文件失败: ", e); + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } } } diff --git a/src/main/java/com/zhgd/xmgl/modules/concrete/entity/ConcreteMonitorCurrentData.java b/src/main/java/com/zhgd/xmgl/modules/concrete/entity/ConcreteMonitorCurrentData.java index 3b92738e3..2700ad4f1 100644 --- a/src/main/java/com/zhgd/xmgl/modules/concrete/entity/ConcreteMonitorCurrentData.java +++ b/src/main/java/com/zhgd/xmgl/modules/concrete/entity/ConcreteMonitorCurrentData.java @@ -61,7 +61,8 @@ public class ConcreteMonitorCurrentData implements Serializable { private Double temperature; @ApiModelProperty(value = "1自动采集2手动采集") private Integer uploadType; - + @ApiModelProperty(value = "设备名称") + private String devName; @TableField(exist = false) @ApiModelProperty(value = "报警等级,1 紧急告警,2 重要告警,3 次要告警,4 提示告警,5 正常") private Integer alarmLevel; diff --git a/src/main/java/com/zhgd/xmgl/modules/concrete/mapper/xml/ConcreteMonitorCurrentDataMapper.xml b/src/main/java/com/zhgd/xmgl/modules/concrete/mapper/xml/ConcreteMonitorCurrentDataMapper.xml index f9ede5330..771a3a6f3 100644 --- a/src/main/java/com/zhgd/xmgl/modules/concrete/mapper/xml/ConcreteMonitorCurrentDataMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/concrete/mapper/xml/ConcreteMonitorCurrentDataMapper.xml @@ -73,7 +73,6 @@ select * from ( select t.* ,cmdpp.point_name - ,cmd.dev_name ,cmd.point_num from concrete_monitor_current_data t join concrete_monitor_dev_point_position cmdpp on t.point_no = cmdpp.point_no and cmdpp.dev_sn=t.dev_sn @@ -86,7 +85,6 @@