许鹏程
2023-06-19 8611fb4ccf61bd32a381570d7fac58909d371325
附件预览
已修改1个文件
32 ■■■■■ 文件已修改
src/main/java/com/product/file/service/FileManagerService.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/product/file/service/FileManagerService.java
@@ -29,6 +29,7 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.*;
@@ -400,6 +401,8 @@
        boolean needDownloadFromServerFlag = "1".equals(attachmentFse.getString(CmnConst.UPLOAD_SIGN));
        String dir = attachmentFse.getString(CmnConst.ATTACHMENT_URL);
        String fileName = attachmentFse.getString(CmnConst.ATTACHMENT_TITLE);
        //真实文件名
        String realFileName = attachmentFse.getString(CmnConst.FILE_NAME);
        String viewOnlineSign = attachmentFse.getString(CmnConst.VIEW_ONLINE_SIGN);
        boolean encrptSignFlag = "1".equals(attachmentFse.getString(CmnConst.ENCRPT_SIGN));
        boolean needOnlineViewFlag = "1".equals(fse.getString(CmnConst.NEED_ONLINE_VIEW)) && "1".equals(viewOnlineSign);
@@ -408,23 +411,19 @@
            dir += File.separator + CmnConst.TRANSFER_DIR_NAME;
        }
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        String userAgent = request.getHeader("User-Agent");
        String file_name = attachmentFse.getString("file_name");
        if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
            file_name = java.net.URLEncoder.encode(file_name, "UTF-8");
        } else {
            // 非IE浏览器的处理:
            file_name = new String(file_name.getBytes("UTF-8"), "ISO-8859-1");
        }
        String path = dir + File.separator + fileName;
        if (needDownloadFromServerFlag) {
            // 需要从附件服务器上取文件
            FTPService ftpService = new FTPService();
            logger.info("需要从附件服务器上取文件...");
            response.setContentType("multipart/form-data");
            response.setHeader("Content-disposition",
                    String.format("attachment; filename=\"%s\"", file_name));
            response.setHeader("Access-Control-Expose-Headers", "*");
            if (realFileName.endsWith(".xlsx") || realFileName.endsWith(".xls")) {
                response.setContentType("application/vnd.ms-excel");
            } else {
                response.setContentType("multipart/form-data");
            }
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(realFileName, "UTF-8"));
            //设置头中的文件类型
            if (!needOnlineViewFlag && !encrptSignFlag) {
                logger.info("不需要解密且获取原文件...");
                try (ServletOutputStream os = response.getOutputStream()) {
@@ -483,9 +482,14 @@
            }
            int len;
            byte[] b = new byte[1024];
            response.setContentType("multipart/form-data");
            InputStream is = new FileInputStream(file);
            response.setHeader("Content-disposition", String.format("attachment; filename=\"%s\"", file_name));
            response.setHeader("Access-Control-Expose-Headers", "*");
            if (realFileName.endsWith(".xlsx") || realFileName.endsWith(".xls")) {
                response.setContentType("application/vnd.ms-excel");
            } else {
                response.setContentType("multipart/form-data");
            }
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(realFileName, "UTF-8"));
            response.setContentLengthLong(file.length());
            try (ServletOutputStream os = response.getOutputStream()) {
                while ((len = is.read(b)) > 0) {