Spring Boot搭建的一个在线文件预览系统( 三 )


/** * 处理office文件 */@Servicepublic class OfficeFilePreviewImpl implements FilePreview {}我们来简单分析一下 OfficeFilePreviewImpl 类中实现预览的核心方法是 filePreviewHandle。
说明:这部分代码的逻辑不够清晰 , 还可以抽方法优化以让人更容易读懂 , 感兴趣的小伙伴可以自己动手重构一下 , 然后去给作者提个 PR 。
@Overridepublic String filePreviewHandle(String url, Model model, FileAttribute fileAttribute) {// 1.获取预览类型(image/pdf/html) , 用户请求中传了officePreviewType参数就取参数的 , 没传取系统默认(image)String officePreviewType = model.asMap().get("officePreviewType") == null ? ConfigConstants.getOfficePreviewType() : model.asMap().get("officePreviewType").toString();// 2.获取 URL 地址String baseUrl = BaseUrlFilter.getBaseUrl();// http://localhost:8012/// 3.获取图片相关信息String suffix=fileAttribute.getSuffix();//文件后缀如docxString fileName=fileAttribute.getName();//文件名如:武汉市文化市场管理办法.docx// 4. 判断是否为 html 格式预览也就是判断文件否为 excelboolean isHtml = suffix.equalsIgnoreCase("xls") || suffix.equalsIgnoreCase("xlsx");// 5. 将文件的后缀名更换为 .pdf 或者 .html(excel文件的情况)String pdfName = fileName.substring(0, fileName.lastIndexOf(".") + 1) + (isHtml ? "html" : "pdf");// 6. 转换后的文件输出的文件夹如 file-online-preview/jodconverter-web/src/main/file/武汉市文化市场管理办法.pdf)String outFilePath = FILE_DIR + pdfName;// 7 .判断之前是否已转换过 , 如果转换过 , 直接返回 , 否则执行转换// 文件第一次被预览的时候会首先对文件进行缓存处理if (!fileUtils.listConvertedFiles().containsKey(pdfName) || !ConfigConstants.isCacheEnabled()) {String filePath;// 下载文件ReturnResponse response = downloadUtils.downLoad(fileAttribute, null);if (0 != response.getCode()) {model.addAttribute("fileType", suffix);model.addAttribute("msg", response.getMsg());return "fileNotSupported";}filePath = response.getContent();if (StringUtils.hasText(outFilePath)) {officeToPdf.openOfficeToPDF(filePath, outFilePath);if (isHtml) {// 对转换后的文件进行操作(改变编码方式)fileUtils.doActionConvertedFile(outFilePath);}if (ConfigConstants.isCacheEnabled()) {// 加入缓存fileUtils.addConvertedFile(pdfName, fileUtils.getRelativePath(outFilePath));}}}// 8.根据预览类型officePreviewType , 选择不同的预览方式// 比如,如果预览类型officePreviewType为pdf则进行pdf方式预览if (!isHtml}model.addAttribute("pdfUrl", pdfName);return isHtml ? "html" : "pdf";}项目地址:
原文地址:


推荐阅读