许鹏程
2025-05-19 c356c77683d055f82a668c28db8b56f9c5e04b84
fix:优化xls在web端预览失败的问题
已修改1个文件
43 ■■■■ 文件已修改
src/main/java/com/product/file/service/FileManagerService.java 43 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/product/file/service/FileManagerService.java
@@ -18,6 +18,7 @@
import com.product.core.spring.context.SpringMVCContextHolder;
import com.product.file.config.CmnConst;
import com.product.file.config.FileCode;
import com.product.file.util.AsposeUtil;
import com.product.file.util.CreateDocumentIndexThread;
import com.product.file.util.FileUtil;
import com.product.file.util.FileUtils;
@@ -445,16 +446,17 @@
            }
        }
    }
    /**
     * 移动端升级,安装包下载
     *
     * @param fse
     * @param response
     */
    public void getFileContent(FieldSetEntity fse, HttpServletResponse response,boolean isUpgrade) throws IOException {
        if(isUpgrade) {
    public void getFileContent(FieldSetEntity fse, HttpServletResponse response, boolean isUpgrade) throws IOException {
        if (isUpgrade) {
            FieldSetEntity attachmentFse = baseDao.getFieldSetEntity(CmnConst.PRODUCT_SYS_ATTACHMENTS, fse.getUUID(), false);
            if (attachmentFse == null || !"product_sys_app_version".equals(attachmentFse.getString("attachment_data_table")) ) {
            if (attachmentFse == null || !"product_sys_app_version".equals(attachmentFse.getString("attachment_data_table"))) {
                return;
            }
            logger.info("正在获取文件流...");
@@ -466,8 +468,8 @@
            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);
            String clientType =CoreConst.CLIENT_TYPE_APP;
            String clientType = CoreConst.CLIENT_TYPE_APP;
            String contentType = "multipart/form-data";
            boolean isExcel = realFileName.endsWith(".xlsx") || realFileName.endsWith(".xls");
@@ -582,8 +584,9 @@
            }
            logger.info("文件流获取成功");
        }
    }
    /**
     * 提取文件信息-下载文件或者在线预览文件
     *
@@ -656,6 +659,19 @@
                    tempOs.flush();
                    tempOs.close();
                }
                boolean delete = false;
                if (realFileName.endsWith(".xls") && needOnlineViewFlag && localTempFile.exists() && !CoreConst.CLIENT_TYPE_APP.equals(clientType)) {
                    //转换为xlsx
                    AsposeUtil.xls2xlsx(localTempFile.getPath(), getSystemConfig("temp.dir", "/attachment/temp") + "/" + localTempFile.getName(), "xls");
                    File oldFile = localTempFile;
                    localTempFile = new File(getSystemConfig("temp.dir", "/attachment/temp") + "/" + localTempFile.getName());
                    if (!localTempFile.isFile()) {
                        localTempFile = oldFile;
                    } else {
                        delete = true;
                        oldFile.delete();
                    }
                }
                response.setContentLengthLong(localTempFile.length());
                InputStream is = new FileInputStream(localTempFile);
                int len;
@@ -695,6 +711,18 @@
                FileUtils.convertPdf(false, false, encrptSignFlag, true, tempSourceFile, dir, fileName, attachmentFse.getString(CmnConst.FILE_NAME));
                tempSourceFile.delete();
            }
            boolean delete = false;
            if (realFileName.endsWith(".xls") && needOnlineViewFlag && file.exists() && !CoreConst.CLIENT_TYPE_APP.equals(clientType)) {
                //转换为xlsx
                AsposeUtil.xls2xlsx(file.getPath(), getSystemConfig("temp.dir", "/attachment/temp") + "/" + file.getName(), "xls");
                File oldFile = file;
                file = new File(getSystemConfig("temp.dir", "/attachment/temp") + "/" + file.getName());
                if (!file.isFile()) {
                    file = oldFile;
                } else {
                    delete = true;
                }
            }
            int len;
            byte[] b = new byte[1024];
            InputStream is = new FileInputStream(file);
@@ -717,6 +745,9 @@
                os.flush();
            }
            is.close();
            if (delete) {
                file.delete();
            }
        }
        logger.info("文件流获取成功");
    }