Spring Boot搭建的一个在线文件预览系统( 二 )
两种模式的适用场景如下
- 图片预览 :Word 文件大(加载 PDF 速度比较慢)的情况 。
- PDF 预览 :内网访问(加载 PDF 速度比较快)的情况 。
文章插图
PDF 预览模式预览效果如下:
文章插图
PDF 文档的预览kkFileView 支持 PDF 文档预览 。 类似 Word 文档预览 ,PDF 预览提供了两种模式:
- 每页 Word 转为图片预览
- 整个 Word 文档转成 PDF , 再预览 PDF 。
文件预览核心代码分析API 层文件预览调用的接口是 /onlinePreview。
通过分析 /onlinePreview 接口我们发现 ,后端接收到预览请求之后 , 会从 URL 和请求中筛选出自己需要的信息比如文件后缀、文件名 。
之后会调用FilePreview类 的 filePreviewHandle() 方法 。 filePreviewHandle()方法是实现文件预览的核心方法 。
@RequestMapping(value = "http://kandian.youth.cn/onlinePreview")public String onlinePreview(String url, Model model, HttpServletRequest req) {FileAttribute fileAttribute = fileUtils.getFileAttribute(url);req.setAttribute("fileKey", req.getParameter("fileKey"));model.addAttribute("pdfDownloadDisable", ConfigConstants.getPdfDownloadDisable());model.addAttribute("officePreviewType", req.getParameter("officePreviewType"));FilePreview filePreview = previewFactory.get(fileAttribute);logger.info("预览文件url:{} , previewType:{}", url, fileAttribute.getType());return filePreview.filePreviewHandle(url, model, fileAttribute);}
FilePreview 是文件预览接口 , 不同的文件类型的预览都实现了 FilePreview 接口 , 并实现了 filePreviewHandle() 方法 。文件预览接口
public interface FilePreview {String filePreviewHandle(String url, Model model, FileAttribute fileAttribute);}
不同的文件类型的预览都实现了 FilePreview 接口 , 如下图所示 。文章插图
不同文件类型的预览都会实现 FilePreview 接口 , 然后重写filePreviewHandle()方法 。 比如:OfficeFilePreviewImpl 这个主要负责处理 office 文件的预览、PdfFilePreviewImpl 主要负责处理 pdf 文件的预览 。
文件预览具体实现分析下面我们以 office 文件的预览为入口来分析 。
首先要明确的是 excel 类型的预览是通过将 excel 文件转换为 HTML 实现的 , 其他类型 office 文件的预览是通过将文件转换为 PDF 或者是 图片的方式来预览的 。
举个例子 。 我们上传了一份名为 武汉市文化市场管理办法.docx 的 Word 文件并预览的话 , jodconverter-web/src/main/file 路径下会生成两个相关文件 , 这两个文件分别对应了我们提到的 PDF 预览 和 图片预览这两种方式 。
- 武汉市文化市场管理办法.pdf
- 由 Word 文件所转化得到的一系列图片
文章插图
我们以一个名为 武汉市文化市场管理办法.docx 的文件来举例说明一下代码中是如何做的 。
通过分析代码 ,我们定位到了 OfficeFilePreviewImpl 这个主要负责处理 office 文件预览的类 。
推荐阅读
- 基于Spring+Angular9+MySQL开发平台
- Bootlin致力于为32位ARM NAS设备提供超过16TiB的存储支持
- 36氪首发 | 与传统外包战事打响,无代码应用搭建平台「黑帕云」完成数千万元 Pre-A 轮融资
- 别不拿GateWay当回事,SpringCloud告诉你错了
- web 安全之 Spring Security 入门教程
- Spring Application实例化流程和构造方法参数
- 一张架构图告诉你数据中台如何搭建
- SpringBoot常用注解
- 一文教你如何搭建http游戏服务器
- 阿里爆款SpringBoot项目实战PDF+源码+视频分享