KKFileView(十一)——文件预览

本文详细阐述了文本文件、CAD图纸及PDF的预览流程,包括下载、编码检测、转换与缓存管理。重点介绍了如何通过DownloadUtils工具、编码检测方法和fileHandlerService来实现不同文件类型的预览操作,以及处理cad转pdf和PDF格式图片的策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2021SC@SDUSC

上篇文章提到文件预览工厂以及实现具体文件预览功能的类,这篇报告着重于各个文件预览流程

 一、文本文件预览

之前的报告中有提到DownloadUtils工具类,该类通过输入文件描述和文件名得到文件的真实路径,如果失败的话也会返回信息“文件不存在”

String fileName = fileAttribute.getName();
        String baseUrll = FILE_DIR + fileName;
        //  String suffix = fileAttribute.getSuffix();
        ReturnResponse<String> response = DownloadUtils.downLoad(fileAttribute, fileName);

 如果查找成功的话根据文件路径获得文件数据,这里也用到了之前提到过的得到文件编码的方法

getJavaEncode(filepath)

获得文件数据的方式是

BufferedReader:提供通用的缓冲方式文本读取,readLine读取一个文本行, 从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。

private String textData(String baseUrll) throws IOException {
        File file = new File(baseUrll);
        if(!file.exists() || file.length() == 0) {
            String line="";
            return line;
        }else {
            String charset = EncodingDetects.getJavaEncode(baseUrll);
            System.out.println(charset);
            BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(baseUrll), charset));
            StringBuilder result = new StringBuilder();
            String line;
            while ((line = br.readLine()) != null) {
                result.append(line).append("\r\n");
            }
            return result.toString();
        }

其中code文件也是按文本文件预览的方式进行预览的

二、CAD文件预览

cad文件预览与文本文件预览一个较大区别就是要将其转化为pdf文件

1、预览Type,参数传了就取参数的,没传取系统默认

officePreviewType文件类型
baseUrl基本地址
fileName文件名
pdfName

转换后的pdf文件名

outFilePath转换后文件地址
 String officePreviewType = fileAttribute.getOfficePreviewType() == null ? ConfigConstants.getOfficePreviewType() : fileAttribute.getOfficePreviewType();
        String baseUrl = BaseUrlFilter.getBaseUrl();
        String fileName = fileAttribute.getName();
        String pdfName = fileName.substring(0, fileName.lastIndexOf(".") + 1) + "pdf";
        String outFilePath = FILE_DIR + pdfName;

2、判断之前是否已转换过,如果转换过,直接返回,否则执行转换

开始步骤与上面没有大的区别,执行转换后要先判断是否转换成功,成功后则判断缓存是否还有多的空间,如果有多的空间则将转换后的文件加入缓存。

 if (!fileHandlerService.listConvertedFiles().containsKey(pdfName) || !ConfigConstants.isCacheEnabled()) {
            String filePath;
            ReturnResponse<String> response = DownloadUtils.downLoad(fileAttribute, null);
            if (response.isFailure()) {
                return otherFilePreview.notSupportedFile(model, fileAttribute, response.getMsg());
            }
            filePath = response.getContent();
            if (StringUtils.hasText(outFilePath)) {
                boolean convertResult = fileHandlerService.cadToPdf(filePath, outFilePath);
                if (!convertResult) {
                    return otherFilePreview.notSupportedFile(model, fileAttribute, "cad文件转换异常,请联系管理员");
                }
                if (ConfigConstants.isCacheEnabled()) {
                    // 加入缓存
                    fileHandlerService.addConvertedFile(pdfName, fileHandlerService.getRelativePath(outFilePath));
                }
            }

3、执行pdf文件预览方法

if (baseUrl != null && (OFFICE_PREVIEW_TYPE_IMAGE.equals(officePreviewType) || OFFICE_PREVIEW_TYPE_ALL_IMAGES.equals(officePreviewType))) {
            return getPreviewType(model, fileAttribute, officePreviewType, baseUrl, pdfName, outFilePath, fileHandlerService, OFFICE_PREVIEW_TYPE_IMAGE,otherFilePreview);
        }

三、PDF预览

开始同上,特点是有两种预览模式,图片格式预览和pdf格式预览

1、判断是否以图片类型预览

if (OfficeFilePreviewImpl.OFFICE_PREVIEW_TYPE_IMAGE.equals(officePreviewType) || OfficeFilePreviewImpl.OFFICE_PREVIEW_TYPE_ALL_IMAGES.equals(officePreviewType)) {

如果是,则将其转为图片类型,并将该图片加入缓存

 if (!fileHandlerService.listConvertedFiles().containsKey(pdfName) || !ConfigConstants.isCacheEnabled()) {
                ReturnResponse<String> response = DownloadUtils.downLoad(fileAttribute, fileName);
                if (response.isFailure()) {
                    return otherFilePreview.notSupportedFile(model, fileAttribute, response.getMsg());
                }
                outFilePath = response.getContent();
                if (ConfigConstants.isCacheEnabled()) {
                    // 加入缓存
                    fileHandlerService.addConvertedFile(pdfName, fileHandlerService.getRelativePath(outFilePath));
                }
            }
            List<String> imageUrls = fileHandlerService.pdf2jpg(outFilePath, pdfName, baseUrl);
            if (imageUrls == null || imageUrls.size() < 1) {
                return otherFilePreview.notSupportedFile(model, fileAttribute, "pdf转图片异常,请联系管理员");
            }
            model.addAttribute("imgurls", imageUrls);
            model.addAttribute("currentUrl", imageUrls.get(0));
            if (OfficeFilePreviewImpl.OFFICE_PREVIEW_TYPE_IMAGE.equals(officePreviewType)) {
                return OFFICE_PICTURE_FILE_PREVIEW_PAGE;
            } else {
                return PICTURE_FILE_PREVIEW_PAGE;
            }

如果按pdf格式预览,则直接将该pdf文件加入缓存

if (url != null && !url.toLowerCase().startsWith("http")) {
                if (!fileHandlerService.listConvertedFiles().containsKey(pdfName) || !ConfigConstants.isCacheEnabled()) {
                    ReturnResponse<String> response = DownloadUtils.downLoad(fileAttribute, pdfName);
                    if (response.isFailure()) {
                        return otherFilePreview.notSupportedFile(model, fileAttribute, response.getMsg());
                    }
                    model.addAttribute("pdfUrl", fileHandlerService.getRelativePath(response.getContent()));
                    if (ConfigConstants.isCacheEnabled()) {
                        // 加入缓存
                        fileHandlerService.addConvertedFile(pdfName, fileHandlerService.getRelativePath(outFilePath));
                    }
                } else {
                    model.addAttribute("pdfUrl", pdfName);
                }

### 使用 kkFileView 实现在线预览压缩包内文件 kkFileView 支持多种类型的文件在线预览,包括常见的压缩文件如 ZIP 和 RAR。为了能够在线查看这些压缩包中的内容而不必先下载整个压缩包到本地设备,可以按照如下方式操作: 对于压缩文件的处理,在线预览功能允许用户浏览ZIP或RAR等格式内部的具体条目,但需要注意的是,实际展示的内容取决于被压缩文件本身的类型——如果是一个Word文档(.doc/.docx),那么将以相应的文档形式展现;如果是图像,则作为图片显示。 #### 配置与设置 确保已经正确安装并配置好了 kkFileView 服务端应用[^1]。这涉及到获取源码、编译构建以及依据操作系统不同采取特定步骤来准备可执行版本。例如,在Linux环境下完成Maven项目的打包之后,需将生成的目标tarball传输给目标机器,并通过命令行工具解压放置于指定位置以便后续调用启动脚本运行该应用程序实例[^4]。 #### 启动参数调整 当针对压缩文件的支持做优化时,可能需要适当调整一些默认行为或者增加额外依赖项以增强兼容性和性能表现。具体来说,可以在`application.properties`或其他相关配置文件里加入必要的选项开关或是第三方库集成说明。 #### API 调用示例 下面给出一段简单的 JavaScript (Vue.js框架适用)代码片段用于发起请求加载待预览资源链接,这里假设服务器已成功部署且能正常响应来自客户端发出的数据读取指令: ```javascript let fileId = "example_zip_file_id"; // 替换成真实的文件ID let previewUrl = `http://your_kkfileview_server_address/onlinePreview?fileId=${fileId}`; fetch(previewUrl) .then(response => response.text()) .then(data => { document.getElementById('previewArea').innerHTML = data; }) .catch(error => console.error('Error:', error)); ``` 这段代码会向KKFileView服务器发送HTTP GET请求尝试获取对应ID所指向的那个压缩包里的具体内容,并将其渲染进页面上的某个容器元素之中供访客查阅。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值