KKFileView(十一)——文件预览

article/2025/9/5 18:10:11

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


http://chatgpt.dhexx.cn/article/ByesLys8.shtml

相关文章

基于开源项目kkFileView打造文件预览

1、需求 一般管理系统都有文件上传功能&#xff0c;基于此一般会诞生一个需求&#xff1a;用户需要在线预览自己上传的文件。需求很合理&#xff0c;但是没那么好做&#xff0c;原因在于浏览器默认支持图片、pdf等少量格式预览&#xff0c;而实际情况是你并不能要求用户只上传…

nginx配置简单文件预览

1.目的 预览图片、pdf、txt 2.配置 #搭建文件预览 server { listen 8888; server_name preview.xxx.com; location ^~ /preview/ { alias D:/data/; #不同OS键入对应path即可 if ($request_filename ~* ^.*?\.(html|doc|…

React封装文件预览组件

封装文件预览组件的时候,预览的文件地址要么是本地文件地址或者是接口返回的文件地址。 这里需要引入两个第三方库,分别是react-file-viewer和react-pdf-js。 其中react-file-viewer可以支持的文件: 虽然它能预览PDF格式的文件,但是为了方便对PDF格式文件预览的控制,比…

vue实现文件预览

1、可以预览图片、文档、视频等,视频需要安装视频预览插件:cnpm install --save video.js 2、代码: <!-- @format --><template><div><!--图片--><div v-if="imgShow"><img :src="downloadUrl" /></div>&l…

如何在vue中实现文件预览功能

文件流 如何将各种文件的文件流(blob)转化为线上可以直接预览的数据&#xff0c;这里简单介绍四种不同类型的文件预览。分别是pdf&#xff0c;docx&#xff0c;xlsx&#xff0c;jpg/png/jpeg等。有一个事情是需要重点注意的&#xff0c;文件流必须保证能够被正常下载解析后才可…

uniAPP手机端文件预览

前言 最近基于uniAPP的app遇到了个需求&#xff0c;需要文件预览。其实官方已经提供了这个解决方案 uni.downloadFile(OBJECT) uni.openDocument(OBJECT) 基于上面这两个API可以实现文件预览。本质上是先将文件下载到本地&#xff0c;然后调用手机内的其他app来打开你要预览…

文件预览:Markdown文件预览

文件预览系列&#xff1a; mavon-editor预览Markdown文件 xlsx预览excel文件 一、安装插件&#xff1a;mavon-editor npm i mavon-editor --save 二、在主文件中引入&#xff0c;并注册 import mavonEditor from mavon-editor; import mavon-editor/dist/css/index.css; /…

kkFileView安装及使用——文件预览解决方案

目录 一、前言二、kkFileView介绍三、kkFileView安装四、kkFileView的配置和使用 一、前言 网页端一般会遇到各种文件&#xff0c;比如&#xff1a;txt、doc、docx、pdf、xml、xls、xlsx、ppt、pptx、zip、png、jpg等等。 有时候我们不想要把文件下载下来&#xff0c;而是想在…

基于若依前后端分离版(Springboot+Vue)的文件预览

主要介绍两种方式实现文件预览的方式&#xff0c;一种是通过前端插件匹配不同的文件&#xff0c;另一种就是使用已经完善的文件预览系统。我更推荐使用第二种方式&#xff0c;因为这样会少去很多工作量。本文主要介绍第一种方式&#xff0c;第二种方式会出现在另外一篇文章中。…

Java中如何实现文件预览的功能

文件预览方法总结 前言一、kkfileview 文件在线预览二、officetohtml纯前端的方式三、JODConverter四、Aspose总结 前言 日常开发中常见的文件格式有pdf&#xff0c;word&#xff0c;Excel&#xff0c;PPT&#xff0c;Html&#xff0c;txt&#xff0c;图片等。pdf&#xff0c;…

前端技术实现文件预览(word、excel、pdf、ppt、mp4、图片、文本)

前言 因为业务需要&#xff0c;很多文件需要在前端实现预览&#xff0c;今天就来了解一下吧。 Demo地址[1]&#xff1a;https://zhuye1993.github.io/file-view/dist/index.html 实现方案 找了网上的实现方案&#xff0c;效果看起来不错&#xff0c;放在下面的表格里&#xff0…

localStorage怎样存取数据 怎样清除localStorage存储的数据

localStorage很多时候用来存储数据非常好&#xff0c;方便在页面中使用某些数据的时候调用 首先&#xff0c;通过setItem(key,value)即可存储数据 然后用getItem(key)的方式即可取得数据 可以看到&#xff0c;设置之后在浏览器的localStorage中看到存储的数据 使用localStoage…

Android App清除数据的方案

前言 最近MIUI13上出了个未经应用商店安装&#xff0c;算是未知来源。AndroidID&#xff0c;通知&#xff0c;网络权限没授权则默认关闭。 安装app时允许虚拟身份ID&#xff1a; 允许允许虚拟身份ID前获取一次AndroidId&#xff1a; attachBaseContext获取AndroidId, 此时还没…

kafka清理数据

由于项目原因&#xff0c;最近经常碰到Kafka消息队列拥堵的情况。碰到这种情况为了不影响在线系统的正常使用&#xff0c;需要大家手动的清理Kafka Log。但是清理Kafka Log又不能单纯的去删除中间环节产生的日志&#xff0c;中间关联的很多东西需要手动同时去清理&#xff0c;否…

Kafka数据清理

目录 kafka数据清理日志删除&#xff08;Log Deletion&#xff09;1. 基于时间的保留策略2. 基于日志大小的保留策略3. 基于日志起始偏移量保留策略 日志压缩&#xff08;Log Compaction&#xff09; 原文地址&#xff1a;https://program-park.github.io/2021/09/18/kafka_11/…

mysql数据库要定期清除吗_数据库mysql定时清除数据

数据库mysql定时清除数据 数据库mysql定时清除数据 https://www.jiangweishan.com/article/2384238490809808.html 作者&#xff1a;andy0012019.11.22来源&#xff1a;Web前端之家浏览&#xff1a;2081评论:0 关键词&#xff1a;jsmysql 一个项目如果规划不合理&#xff0c;每…

SDN是什么,与传统分布式网络有什么区别

传统的的分布式网络 分布式网络也叫网状网络&#xff0c;它是由分布在不同地点的计算机系统互连而成&#xff0c;网中无中心节点。通信子网是封闭式结构&#xff0c;通信控制功能分布在各节点上。 分布式网络的特点是&#xff1a;可靠性高&#xff1b;网内节点共享资源容易&am…

软件定义网络(SDN)

SDN基本概述 参考文章&#xff1a;SDN基本概述、解读SDN的东西、南北向接口 传统网络数据控制与转发 传统网络是分布式控制的架构&#xff0c;每台设备都包含独立的控制平面&#xff0c;数据平面。 传统网络是分布式控制的架构&#xff1a; 这里的分布式控制指在传统IP网络…

sdn通俗介绍

拼客学院服务号 前言 SDN&#xff08;Software Defined Network&#xff09;即软件定义网络&#xff0c;是一种网络设计理念&#xff0c;或者一种推倒重来的设计思想。只要网络硬件可以集中式软件管理&#xff0c;可编程化&#xff0c;控制转发层面分开&#xff0c;则可以认为这…

SDN — Google B4 SDN WAN 网络架构

目录 文章目录 目录Google B4 SDN WAN 网络B4 网络架构物理设备层局部网络控制层全局控制层Google B4 SDN WAN 网络 Google 的 WAN 有 2 张网络(Two Backbones): B2(Internet-facing WAN,I-Scale Network):数据中心互联 Internet(POP)的网络,用于面向 Internet 用户…