package com.ruoyi.web.controller.common; import com.ruoyi.common.config.RuoYiConfig; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.file.FileUploadUtils; import com.ruoyi.common.utils.file.FileUtils; import com.ruoyi.framework.config.ServerConfig; import org.apache.catalina.connector.Connector; import org.apache.catalina.startup.Tomcat; import org.apache.coyote.AbstractProtocol; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.MediaType; import org.springframework.mock.web.MockMultipartFile; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import javax.management.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.lang.management.ManagementFactory; import java.util.Set; /** * 通用请求处理 * * @author ruoyi */ @RestController public class CommonController { private static final Logger log = LoggerFactory.getLogger(CommonController.class); @Autowired private ServerConfig serverConfig; /** * 通用下载请求 * * @param fileName 文件名称 * @param delete 是否删除 */ @GetMapping("common/download") public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request) { try { if (!FileUtils.checkAllowDownload(fileName)) { throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName)); } String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1); String filePath = RuoYiConfig.getDownloadPath() + fileName; response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); FileUtils.setAttachmentResponseHeader(response, realFileName); FileUtils.writeBytes(filePath, response.getOutputStream()); if (delete) { FileUtils.deleteFile(filePath); } } catch (Exception e) { log.error("下载文件失败", e); } } /** * 通用上传请求,type 为0 代表是差旅报销,为1代表费用申请,其它值不变 */ @PostMapping("/common/upload") public AjaxResult uploadFile(MultipartFile file) throws Exception { try { // 上传文件路径 String filePath = RuoYiConfig.getUploadPath(); //判断文件是否存在 String filename = file.getOriginalFilename().trim(); String felinamePath = FileUploadUtils.extractFilename(file); // String pathFileName = FileUploadUtils.getPathFileName(filePath, s); File file1 = new File(filePath + "/" + felinamePath); boolean exists = file1.exists(); if (exists) { int i = filename.lastIndexOf("."); String startStr = filename.substring(0, i); String endStr = filename.substring(i, filename.length()); String newFilename = startStr + System.currentTimeMillis() + endStr; // your new filename String contentType = file.getContentType(); byte[] bytes = file.getBytes(); file = new MockMultipartFile(newFilename, newFilename, contentType, bytes); } // 上传并返回新文件名称 String fileName = FileUploadUtils.upload(filePath, file); String url1 = serverConfig.getUrl(); log.info("url1的值old :{}", url1); if (url1.contains("8032")) { //这里的8032不是tomcat的,所以要转成tomcat的 url1 = url1.replace("8032", "8032/prod-api"); } log.info("url1的值new :{}", url1); String url = url1 + fileName; AjaxResult ajax = AjaxResult.success(); ajax.put("fileName", fileName); ajax.put("url", url); return ajax; } catch (Exception e) { return AjaxResult.error(e.getMessage()); } } // private static void parseUTF(int[] bits) { // int index = 0;//这个指针指向每一行循环时列下标的位置,下一行开始时重新置位0 // int count = 0; // ;//这个变量记录每个UTF-8字符的字节数,至少1字节 // for (int j = ; j < bits.length; ) { // //循环每一行数组数据-从头去读--先读这个字符是几个字节组成的 // // 然后按utf-8的编码格式组合字符串,转换为字符即可 // if (bits[j] == 1) { // count++; // index++; // } else { // index++;//这一位是1后面跟的那一个o // //不为1,则说明已经解析完字节数,count里面存的如果是@表示是单字节数据 // //如果不是o则表示是多字节数据 // String str = ""; // } // } // } // //} /** * 本地资源通用下载 */ @GetMapping("/common/download/resource") public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response) throws Exception { try { if (!FileUtils.checkAllowDownload(resource)) { throw new Exception(StringUtils.format("资源文件({})非法,不允许下载。 ", resource)); } // 本地资源路径 String localPath = RuoYiConfig.getProfile(); // 数据库资源地址 String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX); // 下载名称 String downloadName = StringUtils.substringAfterLast(downloadPath, "/"); response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); FileUtils.setAttachmentResponseHeader(response, downloadName); FileUtils.writeBytes(downloadPath, response.getOutputStream()); } catch (Exception e) { log.error("下载文件失败", e); } } public int getTomcatPort() { MBeanServer beanServer = ManagementFactory.getPlatformMBeanServer(); try { QueryExp protocol = Query.match(Query.attr("protocol"), Query.value("HTTP/1.1")); ObjectName name = new ObjectName("*:type=Connector,*"); Set objectNames = beanServer.queryNames(name, protocol); for (ObjectName objectName : objectNames) { String catalina = objectName.getDomain(); if ("Catalina".equals(catalina)) { return Integer.parseInt(objectName.getKeyProperty("port")); } } } catch (MalformedObjectNameException e) { e.printStackTrace(); } return 0; } }