| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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) { |
| | |
| | | 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(); |
| | | } |
| | | } |
| | |
| | | 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()) { |