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<ObjectName> 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; 
 | 
    } 
 | 
} 
 |