From 7649dec327a8cab6b71b8b57b61fb9e0b32b8650 Mon Sep 17 00:00:00 2001 From: ganhao Date: Wed, 15 Apr 2026 18:08:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8E=86=E5=8F=B2=E6=89=A7=E6=B3=95=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E8=B0=83=E7=94=A8=E5=B8=82=E5=B1=80=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../external/company/OutCommonController.java | 164 ++++++++++++++++++ .../OutEnforcementRegistrationController.java | 4 +- 2 files changed, 166 insertions(+), 2 deletions(-) create mode 100644 lib/EmergencyService/zdxtEmergencyAppService/src/main/java/com/zdxt/app/controller/external/company/OutCommonController.java diff --git a/lib/EmergencyService/zdxtEmergencyAppService/src/main/java/com/zdxt/app/controller/external/company/OutCommonController.java b/lib/EmergencyService/zdxtEmergencyAppService/src/main/java/com/zdxt/app/controller/external/company/OutCommonController.java new file mode 100644 index 00000000..13ec1c12 --- /dev/null +++ b/lib/EmergencyService/zdxtEmergencyAppService/src/main/java/com/zdxt/app/controller/external/company/OutCommonController.java @@ -0,0 +1,164 @@ +package com.zdxt.app.controller.external.company; + +import cn.hutool.core.io.FileTypeUtil; +import cn.hutool.core.io.FileUtil; +import com.google.common.collect.Lists; +import com.zdxt.auth.common.constant.Constants; +import com.zdxt.auth.common.utils.StringUtils; +import com.zdxt.auth.common.utils.file.FileUploadUtils; +import com.zdxt.auth.common.utils.file.FileUtils; +import com.zdxt.auth.dto.UserBean; +import com.zdxt.auth.feign.UserApi; +import com.zdxt.auth.framework.config.ServerConfig; +import com.zdxt.auth.framework.web.domain.AjaxResult; +import com.zdxt.common.ZDResponse; +import com.zdxt.common.config.RuoYiConfig; +import org.apache.commons.collections4.CollectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.InputStream; +import java.util.List; +import java.util.Locale; + +/** + * 通用请求处理 + * + * @author ruoyi + */ +@Controller +public class OutCommonController +{ + private static final Logger log = LoggerFactory.getLogger(OutCommonController.class); + + @Autowired + private ServerConfig serverConfig; + + @Autowired + private UserApi userApi; + /** + * 默认允许的文件类型 + * + * @see FileTypeUtil + */ + private List defaultAllowTypes = Lists.newArrayList( + "xlsx", "xls", "docx", "doc", "pdf", "txt", + "jpg", "jpeg", "png", "bmp", "mp4", + "zip"); + + /** + * 通用下载请求 + * + * @param fileName 文件名称 + * @param delete 是否删除 + */ + @GetMapping("/external/common/download") + public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request) + { + try + { + if (!FileUtils.isValidFilename(fileName)) + { + throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName)); + } + String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1); + String filePath = RuoYiConfig.getDownloadPath() + fileName; + + response.setCharacterEncoding("utf-8"); + response.setContentType("multipart/form-data"); + response.setHeader("Content-Disposition", + "attachment;fileName=" + FileUtils.setFileDownloadHeader(request, realFileName)); + FileUtils.writeBytes(filePath, response.getOutputStream()); + if (delete) + { + FileUtils.deleteFile(filePath); + } + } + catch (Exception e) + { + log.error("下载文件失败", e); + } + } + + /** + * 通用上传请求 + */ + @PostMapping("/external/common/upload") + @ResponseBody + public AjaxResult uploadFile(MultipartFile file) throws Exception + { + try + { + String fileNameTmp = file.getOriginalFilename(); + InputStream in = file.getInputStream(); + String type = FileTypeUtil.getType(in); + if (StringUtils.isBlank(type)) { + // 无法通过文件头或者扩展名识别文件类型。 + return AjaxResult.error("上传失败格式不符合要求"); + } + + String extType = FileUtil.extName(fileNameTmp); + if (StringUtils.isBlank(extType)) { + // 后缀读不到类型,直接拒绝 + return AjaxResult.error("无法读取文件类型"); + } + + // 文件头类型和后缀类型都要满足白名单 + if (!CollectionUtils.containsAll(defaultAllowTypes, + Lists.newArrayList(type.toLowerCase(Locale.ROOT), extType.toLowerCase(Locale.ROOT)))) { + + return AjaxResult.error("文件上传失败"); + } + + // 上传文件路径 + String filePath = RuoYiConfig.getUploadPath(); + // 上传并返回新文件名称 + String fileName = FileUploadUtils.upload(filePath, file); + log.info("文件上传"+fileName); + String url = fileName; + AjaxResult ajax = AjaxResult.success(); + ajax.put("fileName", fileName); + ajax.put("url", url); + return ajax; + } + catch (Exception e) + { + return AjaxResult.error(e.getMessage()); + } + } + + /** + * 本地资源通用下载 + */ + @GetMapping("/external/common/download/resource") + public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response) + throws Exception + { + // 本地资源路径 + String localPath = RuoYiConfig.getProfile(); + // 数据库资源地址 + String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX); + // 下载名称 + String downloadName = StringUtils.substringAfterLast(downloadPath, "/"); + response.setCharacterEncoding("utf-8"); + response.setContentType("multipart/form-data"); + response.setHeader("Content-Disposition", + "attachment;fileName=" + FileUtils.setFileDownloadHeader(request, downloadName)); + FileUtils.writeBytes(downloadPath, response.getOutputStream()); + } + + @GetMapping("/external/getUserInfo") + @ResponseBody + public ZDResponse getUserInfo(){ + UserBean user = userApi.getCurrentUser(); + return ZDResponse.success("查询成功",user); + } +} diff --git a/lib/EmergencyService/zdxtEmergencyAppService/src/main/java/com/zdxt/app/controller/external/company/OutEnforcementRegistrationController.java b/lib/EmergencyService/zdxtEmergencyAppService/src/main/java/com/zdxt/app/controller/external/company/OutEnforcementRegistrationController.java index 6e7020ca..ec74996e 100644 --- a/lib/EmergencyService/zdxtEmergencyAppService/src/main/java/com/zdxt/app/controller/external/company/OutEnforcementRegistrationController.java +++ b/lib/EmergencyService/zdxtEmergencyAppService/src/main/java/com/zdxt/app/controller/external/company/OutEnforcementRegistrationController.java @@ -636,9 +636,9 @@ public class OutEnforcementRegistrationController extends BaseController /** * 执法登记详情 - 联合执法版本 */ - @GetMapping("/queryUniteById/{id}") + @GetMapping("/queryUniteById") @ResponseBody - public ZDResponse queryUniteById(@PathVariable("id") String id) + public ZDResponse queryUniteById(String id) { List regResults = new ArrayList<>(); List lawResults = new ArrayList<>();