许鹏程
2025-02-11 02d038387df02b1e4dcf140c3e78c6f95719155e
excel文件预览app端特殊处理
已修改1个文件
38 ■■■■ 文件已修改
src/main/java/com/product/file/service/FileManagerService.java 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/product/file/service/FileManagerService.java
@@ -1,9 +1,11 @@
package com.product.file.service;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.product.common.lang.StringUtils;
import com.product.core.config.CoreConst;
import com.product.core.config.Global;
import com.product.core.connection.ConnectionManager;
import com.product.core.dao.BaseDao;
@@ -465,13 +467,17 @@
        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);
//        if (needOnlineViewFlag && !realFileName.endsWith(".xlsx") && !realFileName.endsWith(".xls")) {
//            // 需要在线预览且转换之后才能在线预览 excel 文件不需要转换直接输出预览
//            dir += File.separator + CmnConst.TRANSFER_DIR_NAME;
//        }
        String clientType = SpringMVCContextHolder.getCurrentUser().getClientType();
        String contentType = "multipart/form-data";
        boolean isExcel = realFileName.endsWith(".xlsx") || realFileName.endsWith(".xls");
        if (needOnlineViewFlag) {
            // 需要在线预览且转换之后才能在线预览 excel 文件不需要转换直接输出预览
            //特殊处理: 如果客户端不是App 但预览的文件是Excel 直接返回excel源文件 content头标识是excel cheng 2025年2月11日10:41:41
            if (isExcel && !CoreConst.CLIENT_TYPE_APP.equals(clientType)) {
                contentType = "application/vnd.ms-excel";
            } else {
            dir += File.separator + CmnConst.TRANSFER_DIR_NAME;
            }
        }
        String path = dir + File.separator + fileName;
@@ -480,13 +486,8 @@
            FTPService ftpService = new FTPService();
            logger.info("需要从附件服务器上取文件...");
            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.setContentType("multipart/form-data");
            response.setContentType(contentType);
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(realFileName, "UTF-8"));
            //设置头中的文件类型
            if (!needOnlineViewFlag && !encrptSignFlag) {
@@ -537,12 +538,14 @@
            String localBasePath = Global.getSystemConfig("local.dir", "");
            path = localBasePath + File.separator + path;
            File file = new File(path);
            if (needOnlineViewFlag && file.exists() && (realFileName.endsWith(".xlsx") || realFileName.endsWith(".xls"))) {
                //获取文件的修改时间
            if (needOnlineViewFlag && file.exists() && CoreConst.CLIENT_TYPE_APP.equals(clientType)) {
                //特殊处理: 是App 但预览的文件是Excel 需要将之前已转换为的文件删除掉重新转换(因转换后的格式不是pdf)
                String changeTime = "2025-02-11 23:59:59";
                Date changeDate = DateUtil.parse(changeTime, "yyyy-MM-dd HH:mm:ss");
                long fileTime = file.lastModified();
                //如果时间是 2025年2月10日23:59:59,那么就重新转换
                //删除文件
                if (fileTime <= 1739203198000L) {
                if (fileTime <= changeDate.getTime()) {
                    file.delete();
                }
            }
@@ -558,13 +561,8 @@
            byte[] b = new byte[1024];
            InputStream is = new FileInputStream(file);
            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.setContentType("multipart/form-data");
            response.setContentType(contentType);
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(realFileName, "UTF-8"));
            response.setContentLengthLong(file.length());
            try (ServletOutputStream os = response.getOutputStream()) {