SpringBoot 使用unoconv 在线预览 doc,doxc,xls,xlsx,ppt,pptx 文件

接上一篇:linux环境源码安装unoconv
Linux环境_源码安装Unoconv实现文件在线预览doc,doxc,xls,xlsx,ppt,pptx 文件
https://gblfy.blog.csdn.net/article/details/103540694

接上一篇:linux环境yum安装unoconv
unoconv 在线预览 doc,doxc,xls,xlsx,ppt,pptx 文件功能环境搭建
https://gblfy.blog.csdn.net/article/details/102847276

实现原理:在Linux服务器上安装unoconv 插件,插件作用是进行doc,doxc,xls,xlsx,ppt,pptx 五种类型文件的格式转换。
最终都会转换成以后缀名.pdf结尾的pdf文件,进行在线预览。

文章目录

  • 一、环境准备:
  • 二、需求案例
  • 三、实现思路:
  • 四、Linux预览环境
  • 五、创建SpringBoot项目
  • 六、项目配置详细
    • 6.1. pom依赖:
    • 6.2. 新建controller
    • 6.3. 在线预览工具类
  • 七、linux环境测试
    • 7.1. 放置文件
    • 7.2. 运行项目
    • 7.3. 查看控制台日志
    • 7.4. 浏览器访问验证
    • 7.5. 效果图
  • 八、项目源码

一、环境准备:

软件版本
框架SpringBoot 2.1.1.RELEASE
unoconv0.6
LibreOffice5.3.6.1 30(Build:1)

二、需求案例

实现 doc,doxc,xls,xlsx,ppt,pptx 文件在线预览
已知条件(需求文档给出):

序号说明
文件存储路径/app/
文件名及文件格式 20191009133209lis_chgrpt.docx
访问http://192.168.6.56/viewPDF 实现在线预览

注:其他格式同上所述

三、实现思路:

序号说明
使用mvn打包项目 例:jar包
把 20191009133209lis_chgrpt.docx文件放到linux拂去其的/app/目录下面
启动项目:java -jar jarName
查看控制台日志
浏览器访问http://192.168.6.56/viewPDF 验证在线预览效果

四、Linux预览环境

服务器是Linux环境,需要在Linux服务器安装一个运行环境。详细请参考文档步骤进行安装:
unoconv 在线预览 doc,doxc,xls,xlsx,ppt,pptx 文件功能环境搭建
https://blog.csdn.net/weixin_40816738/article/details/102847276

五、创建SpringBoot项目

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

SpringBoot 项目创建完成!!!

六、项目配置详细

6.1. pom依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.1.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.gblfy</groupId><artifactId>file-online-preview</artifactId><version>0.0.1-SNAPSHOT</version><name>file-online-preview</name><url>想学习更多知识请访问 https://gblfy.com</url><description>SpringBoot在线预览</description><properties><!--编码设置--><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><!--JDK版本--><java.version>1.8</java.version></properties><dependencies><!--Springmvc启动器--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--excel导入导出--><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-web</artifactId><version>4.0.0</version></dependency><!--单元测试--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

6.2. 新建controller

package com.gblfy.file.onlinepreview.controller;import com.gblfy.file.onlinepreview.utils.LinuxPageDIsplsyFileUtil;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;/*** @author gblfy* @ClassNme FileController* @Description 文件在在线预览* @Date 2019/11/1 8:09* @version1.0*/
@RestController
public class FileOnlinePreviewController {/*** 在线预览测试方法* 企业真实需求:* 文件的路径 文件名 都需要动态获取** @param response  http响应网页来实现在线预览* @throws Exception*/@RequestMapping("/viewPDF")public void reviewWord(HttpServletResponse response)throws Exception{LinuxPageDIsplsyFileUtil linuxPageDIsplsyFileUtil = new LinuxPageDIsplsyFileUtil();//文件存储路径String fileStoragePath ="/app/";//转换前的文件名String beforeConversion ="20191009133209lis_chgrpt.docx";/*** 文件格式转换+在线预览*/linuxPageDIsplsyFileUtil.conversionFile(response,fileStoragePath,beforeConversion);}@RequestMapping("/viewPDF2")public void reviewWord2(HttpServletResponse response)throws Exception{LinuxPageDIsplsyFileUtil linuxPageDIsplsyFileUtil = new LinuxPageDIsplsyFileUtil();//文件存储路径String fileStoragePath ="/app/";//转换前的文件名String beforeConversion ="2019101114041220190929142601新人业务知识培训2017.pdf";/*** 文件格式转换+在线预览*/linuxPageDIsplsyFileUtil.conversionFile(response,fileStoragePath,beforeConversion);}
}

6.3. 在线预览工具类

package com.gblfy.file.onlinepreview.utils;import org.apache.poi.util.IOUtils;import javax.servlet.http.HttpServletResponse;
import java.io.*;/*** @Author  : gblfy* @Date    : 2019/11/01  11:20* @describe: 文档在线预览** 服务器环境:Linux环境* 现支持文档类型: Excel  word  ppt pdf*/
/*** @Author  : gblfy* @Date    : 2019/11/01  11:20* @describe: 文档在线预览** 服务器环境:Linux环境* 现支持文档类型: Excel  word  ppt pdf*/
public class LinuxPageDIsplsyFileUtil {private static LinuxPageDIsplsyFileUtil linuxPageDIsplsyFileUtil;public static synchronized LinuxPageDIsplsyFileUtil getSwitchUtil() {if (linuxPageDIsplsyFileUtil == null) {linuxPageDIsplsyFileUtil = new LinuxPageDIsplsyFileUtil();}return linuxPageDIsplsyFileUtil;}/*** 文档在线预览** @param response* @param fileStoragePath  文件存储路径 (前段获取文件存储路径返给后台)* @param beforeConversion 文件名(必须带文件后缀名,这里指的就是文件全名称)* @throws Exception*/public void conversionFile(HttpServletResponse response, String fileStoragePath, String beforeConversion) throws Exception {//文件存储路径//fileStoragePath ="/app/";//转换前的文件名//beforeConversion ="20191009133209lis_chgrpt.docx";String fileNamePath = fileStoragePath + beforeConversion;File file = new File(fileNamePath);if (!file.exists()) {System.err.println("库存中没有指定文件。。。。");return;}//获取到文件名String interceptFileName = beforeConversion.substring(0, beforeConversion.lastIndexOf("."));//截取文件后缀名String fileNameSuffix = beforeConversion.substring(beforeConversion.lastIndexOf(".") + 1);String command = null;if("pdf".equals(fileNameSuffix)){/*** 在线预览方法*/openPdf(response, fileStoragePath + interceptFileName + ".pdf");}else if("doc".equals(fileNameSuffix)||"docx".equals(fileNameSuffix)||"xls".equals(fileNameSuffix)||"xlsx".equals(fileNameSuffix)||"ppt".equals(fileNameSuffix)||"pptx".equals(fileNameSuffix)) {//文件格式转换命令 unoconv插件实现command = "/usr/bin/unoconv -f pdf " + fileNamePath;//格式转换+在线预览formatConverAndPreview(command,response,fileStoragePath,interceptFileName);// }else if("docx".equals(fileNameSuffix)) {//     command = "/usr/bin/unoconv -f pdf " + fileNamePath;//     formatConverAndPreview(command,response,fileStoragePath,interceptFileName);// }else if("xls".equals(fileNameSuffix)) {//     command = "/usr/bin/unoconv -f pdf " + fileNamePath;//     formatConverAndPreview(command,response,fileStoragePath,interceptFileName);// }else if("xlsx".equals(fileNameSuffix)) {//     command = "/usr/bin/unoconv -f pdf " + fileNamePath;//     formatConverAndPreview(command,response,fileStoragePath,interceptFileName);// }else if("ppt".equals(fileNameSuffix)) {//     command = "/usr/bin/unoconv -f pdf " + fileNamePath;//     formatConverAndPreview(command,response,fileStoragePath,interceptFileName);// }else if("pptx".equals(fileNameSuffix)) {//     command = "/usr/bin/unoconv -f pdf " + fileNamePath;//     formatConverAndPreview(command,response,fileStoragePath,interceptFileName);}else{System.err.println("暂不支持该类型文件在线预览!!!");return;}}/*** 格式转换+在线预览 方法** @param command            文件格式转换命令         例:/usr/bin/unoconv -f pdf  /app/1.pptx* @param response           http响应网页,实现在线预览* @param fileStoragePath    准备文件存放路径         例:/app/* @param interceptFileName  文件名                  例: 1.pptx* @throws Exception*/public void formatConverAndPreview(String command,HttpServletResponse response,String fileStoragePath,String interceptFileName)throws Exception{/*** 格式转换方法*///String temp ="/usr/bin/unoconv -f pdf " + command;executeCommand(command);/*** 在线预览方法*/openPdf(response, fileStoragePath + interceptFileName + ".pdf");}/*** 在线预览方法* 把转换后的pdf文件在网页上进行预览** @param response  http响应* @param previewFile  文件的決定路径  例:/app/20191009133209_chgrpt.pdf* @throws Exception  格式转换过程中的异常*/private static void openPdf(HttpServletResponse response, String previewFile) throws Exception {InputStream inputStream = null;OutputStream outputStream = null;//String path ="/app/20191009133209_chgrpt.pdf";inputStream = new FileInputStream(previewFile);//响应文件的类型response.setContentType("application/pdf");outputStream = response.getOutputStream();int a = 0;byte[] b = new byte[1024];while ((a = inputStream.read(b)) != -1) {outputStream.write(b, 0, a);}if (outputStream != null) {outputStream.close();}if (inputStream != null) {inputStream.close();}}/*** 格式转换方法* <p>* 統一把文件转换成pdf文件** @param command 文件格式转换命令   例:/usr/bin/unoconv -f pdf  /app/1.pptx* @throws Exception   格式转换过程中的异常*/private static void executeCommand(String command) throws Exception {StringBuffer output = new StringBuffer();Process process;InputStreamReader inputStreamReader = null;BufferedReader reader = null;try {process = Runtime.getRuntime().exec(command);process.waitFor();inputStreamReader = new InputStreamReader(process.getInputStream(), "UTF-8");reader = new BufferedReader(inputStreamReader);String line = "";while ((line = reader.readLine()) != null) {output.append(line + "\n");}//p.destroy();//这个一般不需要} catch (Exception e) {e.printStackTrace();} finally {IOUtils.closeQuietly(reader);IOUtils.closeQuietly(inputStreamReader);}}
}

七、linux环境测试

7.1. 放置文件

在这里插入图片描述

在这里插入图片描述

7.2. 运行项目

nohup java -jar jarName >msg.log 2>&1 &

7.3. 查看控制台日志

tail -f msg.log

7.4. 浏览器访问验证

#在线预览docx
http://192.168.45.56/viewPDF
#在线预览pdf
http://192.168.45.56/viewPDF2

7.5. 效果图

在这里插入图片描述
在这里插入图片描述

八、项目源码

gitlab地址:https://gitlab.com/gb-heima/file-online-preview

学习更多技术知识,请移步https://gblfy.com主页

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523050.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解码2017双11:全球狂欢新记录背后的阿里云存储

摘要&#xff1a; 2017天猫双11再次刷新纪录&#xff0c;这背后是大数据的支撑和阿里云计算的能力的体现。手淘、天猫APP主站的所有图片和视频都存储在阿里云对象存储OSS之上&#xff0c;全球数以亿计的消费者&#xff0c;对这些商品的访问的流量和并发次数&#xff0c;比成交笔…

开发者,什么是你真正关心的问题?| AI ProCon 2019

2018 年&#xff0c;上千名开发者与上百名技术专家齐聚一堂&#xff0c;在 CSDN 2018 AI开发者大会上以“AI技术与应用”为核心&#xff0c;深度聚焦人工智能的技术创新与行业应用&#xff0c;真正做到了“只讲技术&#xff0c;拒绝空谈”。今年&#xff0c;在产业智能化的浪潮…

最大值_Leetcode2 | 滑动窗口最大值(Q239)

:)Sliding Window MaximumQ 239今天也是好心情Problem Description DifficultyYou are given an array of integers nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the w…

PCDN实现flash无延时直播的技术原理与优点

摘要&#xff1a; PCDN是以P2P技术为基础&#xff0c;通过挖掘利用边缘网络海量碎片化闲置资源而构建的内容分发网络&#xff0c;它具有低成本、高品质的特点&#xff0c;十分适用于视频直播这一业务场景。针对直播中延时的情况&#xff0c;PCDN也进行了一系列优化&#xff0c;…

CDN新品发布:阿里云SCDN安全加速开放公测

摘要&#xff1a; SCDN(SecureCDN)安全加速产品是CDN推出的一款集合安全能力的内容加速服务&#xff0c;用户就近取得所需内容解决因分布、带宽、服务器性能带来的访问延迟问题&#xff0c;提升网站访问速度。同时防护DDoS&#xff0c;CC&#xff0c;Web应用攻击&#xff0c;恶…

美企调查华为设备安全性,华为发长文质疑;摩根大通预计苹果2020年将推5G iPhone;谷歌拟联手Dish成立美国第四大运营商...

戳蓝字“CSDN云计算”关注我们哦&#xff01;嗨&#xff0c;大家好&#xff0c;重磅君带来的【云重磅】特别栏目&#xff0c;如期而至&#xff0c;每周五第一时间为大家带来重磅新闻。把握技术风向标&#xff0c;了解行业应用与实践&#xff0c;就交给我重磅君吧&#xff01;重…

实现mvcc_MySQL 的多版本并发控制(MVCC) 是干啥的?

点击蓝色“架构文摘”关注我哟加个“星标”&#xff0c;每天上午 09:25&#xff0c;干货推送&#xff01;来源&#xff1a;https://segmentfault.com/a/1190000037557620作者&#xff1a;白菜1031一、什么是多版本并发控制多版本并发控制 技术的英文全称是 Multiversion Concur…

网站访问速度提升200%以上,阿里云虚拟主机支持PHP最新版本

摘要&#xff1a; 日前&#xff0c;阿里云虚拟主机推出了新功能&#xff0c;支持PHP的最新版本 7.0和7.1&#xff0c;并支持用户在多个不同PHP版本之间切换。 PHP 作为最好的Web编程语言&#xff0c;最新版本已经更新到了7.0和7.1。阿里云作为国内虚拟主机的领头羊&#xff0c;…

2019年6月 阿里技术面试题集锦(28道含答案)

戳蓝字“CSDN云计算”关注我们哦&#xff01;想要入职大厂可谓是千军万马过独木桥。要通过层层考验&#xff0c;刷题肯定是必不可少的。为帮助开发者们提升面试技能、有机会入职阿里&#xff0c;云栖社区特别制作了这个专辑——阿里巴巴资深技术专家们结合多年的工作、面试经验…

一键清理网站木马文件,从此网站拥有专属保镖 ——阿里云虚拟主机推出木马查杀功能...

摘要&#xff1a; 近日&#xff0c;阿里云推出了云虚拟主机网站木马查杀的新功能&#xff0c;十分适合对网站安全不了解、不熟悉的用户&#xff0c;或网站出现挂马情况不清楚如何处理的用户。 阿里云表示&#xff0c;此次网站木马查杀功能是阿里云安骑士专为虚拟主机推出的安全…

每天自动备份网站数据,发现问题一键恢复 ——阿里云虚拟主机推出网站数据自动备份功能...

摘要&#xff1a; 近日&#xff0c;阿里云宣布推出虚拟主机网站自动备份功能&#xff0c;可自动备份用户的网站和数据库数据至单独的备份区域&#xff0c;用户可随时恢复前三天的网站和数据库的数据。一旦出现意外或者数据丢失情况&#xff0c;可将损失降低到最低。 数据是用户…

如何快速下载CentOS7镜像

在centOS官网下载很慢&#xff0c;因此记录哪里下载比较快&#xff0c;其实就是 开源镜像网站网址阿里巴巴开源镜像站https://opsx.alibaba.com/mirror网易163开源镜像网站http://mirrors.163.com/ 下载entOS7步骤&#xff1a; 以阿里巴巴开源镜像网站作演示&#xff1a; 1.进…

pypi.python.org_在Pypi上发布自己的Python包

使用Python编程的都知道&#xff0c;Python的包安装非常的方便&#xff0c;一般都是可以pip来安装搞定&#xff1a;sudo pip install 最近因为项目上的需要&#xff0c;发布了一个自己的pypi Python包&#xff0c;这里我大致分享如何发布自己的Pypi包一般过程。打包工作主要依赖…

20大5G关键技术

戳蓝字“CSDN云计算”关注我们哦&#xff01;来源 | 北京物联网智能技术应用协会5G网络技术主要分为三类&#xff1a;核心网、回传和前传网络、无线接入网。核心网核心网关键技术主要包括&#xff1a;网络功能虚拟化&#xff08;NFV&#xff09;、软件定义网络&#xff08;SDN&…

AliOS Things网络连接技术概述

摘要&#xff1a; AliOS Things具有非常丰富的连接组件和能力&#xff0c;主要包括: 自组织网络协议(uMesh)&#xff0c; 套接字适配层(SAL)&#xff0c;TCP/IP网络协议栈(LwIP)和连接协议(WiFi,BLE, LoRaWAN, GPRS和NB-IoT等) AliOS Things 是 AliOS 家族旗下的、面向 IoT 领域…

SCDN的抗CC攻击和抗DDoS攻击防护是什么?

摘要&#xff1a; 阿里云SCDN提供的一整套加速和安全的解决方案。目前SCDN抗CC防护保底6万QPS&#xff0c;最高到100万QPS。另可定制最高达250万QPS防护。而抗DDoS保底防护20Gbps&#xff0c;最高到300Gbps。另可定制最高达600Gbps防护。 CC攻击是什么&#xff1f; CC攻击是 D…

命令启动jar包_java项目打jar包,一句命令搞定

jar命令格式&#xff1a;jar {c t x u f }[ v m e 0 M i ][-C 目录]文件名其中{ctxu}这四个参数必须选选其一。[v f m e 0 M i ]是可选参数&#xff0c;文件名也是必须的。所有的参数说明&#xff1a;-c 创建一个jar包-t 显示jar中的内容列表-x 解压jar包-u 添加文件到jar包中-…

Linux:查询当前进程或线程的资源使用情况

目录 一、/proc/[PID]/下的各个文件1、proc简介2、/proc/[PID]/详解 二、通过Linux API获取当前进程或线程的资源使用情况1、getrusage2、sysinfo3、times 在工作中&#xff0c;我们排除app出现的一些性能/资源问题时&#xff0c;通常要先知道当前app的资源使用情况&#xff0c…

如何使用API提交转码任务?

摘要&#xff1a; 当常规的转码工作流无法满足用户的场景时&#xff0c;需用户自己判断业务逻辑&#xff0c;并使用API提交转码任务。例如&#xff1a;并不是所有的视频都需要转码&#xff0c;不同视频需要设置不同的转码配置。本文将介绍API提交转码任务的方法。 当常规的转码…

微博短视频千万级高可用、高并发架构如何设计?

作者&#xff1a;刘志勇&#xff0c;本文来自新浪微博视频平台资深架构师刘志勇在 LiveVideoStackCon 2018 讲师热身分享&#xff0c;并由 LiveVideoStack 整理而成。 本文从设计及服务可用性方面&#xff0c;详细解析了微博短视频高可用、高并发架构设计中的问题与解决方案。…