Office在线预览-永中
概述
官方网站:http://api.yozocloud.cn/
优点:很便宜(一个域名一年3000),使用难易程度接近0,可单独在内网部署,可预览office套装:word、excel、ppf、pdf、图片、txt等很多文档类型;(使用:仅需要提供个域名下的文件下载接口,注册账号有500次预览体验)。
缺点:1.公网超过10M的文件预览很慢;2.安全:虽然提供水印、防复制参数,但是为了文件的安全,还是需自己开发文件下载IP白名单过滤器;(也提供直接请求文件预览地址接口,可以不暴露文件下载地址)。
例子:技术架构:springboot2+freemark2.26+tk.mybatis2.0.4+pagehelper1.2.12的文件上传下载、分页查询(Spring Boot 集成 MyBatis, 分页插件 PageHelper, 通用 Mapper)
本博客包含三个模块:1.永中文件中专站的介绍;2.代码相关技术和开发流程介绍;3.相关pom依赖及配置介绍
代码下载地址:https://download.csdn.net/download/qq_26408545/12339351
代码预览地址:http://www.javakly.com:8080,自2020-04-19,7天内有效:效果如下
一:永中文件中专站的介绍
使用3步:1.去官网注册账号,并配置域名信息,获得key官网地址:https://api.yozocloud.cn
2.根据你得文件下载地址拼接预览地址:2种方式
- 第一方式:直接根据下载地址和key:拼接文件的预览地址:
如:http://dcsapi.com/?k=1744232&url=http://58.215.166.234/example/doc/doctest.docx
http://永中文件预览网址+?k=(域名对应的用户Key)+&url=(在线文档下载地址) +&isCopy=(是否防复制1是0否,可选) +&watermaerk=(水印文字内容,可选)
3个可选参数:1、watermark:String格式。针对单文档设置水印内容。2、isCopy:Integer格式(0否1是,默认为0。针对单文档设置是否防复制)。3、noCache:Boolean格式。是否强制重新转换(忽略缓存),true为强制重新转换,false为不强制重新转换。
第二种方式:用户通过api调用方式获取预览地址
请求地址:http://api.yozocloud.cn/getPreview?k=123456&url=http://abc.com/123.doc
说明:http://api网址/ getPreview +?k=(域名对应的用户Key)+&url=(在线文档地址) +&isCopy=(是否防复制1是0否,可选) +&watermaerk=(水印文字内容,可选)
获得json : errorcode=0代表请求成功,拿到data.data,可直接通过网址代开;
{"data":{"data":"https://p.dcsapi.com/view/preview/xxxxxxxx/"},"message":"操作成功","errorcode":0
}
二:代码相关技术和开发流程介绍
代码模板参考:https://github.com/abel533/MyBatis-Spring-Boot:Spring Boot 集成 MyBatis, 分页插件 PageHelper, 通用 Mapper
2.1 tk.mybatis的通用mapper实现逆向工程的生成
1.首先在数据库中建好表。
DROP TABLE IF EXISTS sys_files;
CREATE TABLE sys_files (file_id int(11) NOT NULL AUTO_INCREMENT comment '文件主键',file_name varchar(255) NOT NULL comment '文件名称',file_new_name varchar(255) NOT NULL comment '文件新名字',file_type varchar(500) NOT NULL comment '文件类型',file_url varchar(500) NOT NULL comment '文件下载地址',file_Show_url varchar(255) NOT NULL comment '文件预览地址',create_by varchar(64) default '' comment '创建者',create_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '创建时间',update_by varchar(64) default '' comment '更新者',update_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '更新时间',PRIMARY KEY (file_id),INDEX(file_name),INDEX(file_type)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 comment '系统文件';
2.然后在pom中增加mybatis和通用mapper的依赖,以及generator的插件,generator配置见3。
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><dependencies><dependency><groupId>org.springframework</groupId><artifactId>springloaded</artifactId><version>1.2.5.RELEASE</version></dependency></dependencies></plugin><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.2</version><configuration><configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile><overwrite>true</overwrite><verbose>true</verbose></configuration><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><dependency><groupId>tk.mybatis</groupId><artifactId>mapper-generator</artifactId><version>1.0.0</version></dependency></dependencies></plugin></plugins></build>
3.需要自己在utils中的MyMapper中继承tk.mybatis中的通用模板,添加要逆向生成的表。
package com.javakly.utils;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;
public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T> {//TODO//FIXME 特别注意,该接口不能被扫描到,否则会出错
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration><properties resource="application-dev.properties"/><context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat"><property name="beginningDelimiter" value="`"/><property name="endingDelimiter" value="`"/><plugin type="tk.mybatis.mapper.generator.MapperPlugin"><property name="mappers" value="com.javakly.utils.MyMapper"/></plugin><jdbcConnection driverClass="${spring.datasource.driver-class-name}"connectionURL="${spring.datasource.url}"userId="${spring.datasource.username}"password="${spring.datasource.password}"></jdbcConnection><javaModelGenerator targetPackage="com.javakly.model" targetProject="src/main/java"/><sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"/><javaClientGenerator targetPackage="com.javakly.mapper" targetProject="src/main/java"type="XMLMAPPER"/><table tableName="sys_files"><!--mysql 配置--><generatedKey column="file_id" sqlStatement="Mysql" identity="true"/><!--oracle 配置--><!--<generatedKey column="id" sqlStatement="select SEQ_{1}.nextval from dual" identity="false" type="pre"/>--></table></context>
</generatorConfiguration>
4.在myeclipse运行mybatis-generator:generate命令(myeclipse自带mvn 前缀)
2.2springboot整合FreeMarker配置
server.port=8080
#context-path第一次请求的地址
server.context-path=/files
server.session.timeout=600000
server.tomcat.uri-encoding=UTF-8
server.tomcat.max-threads=800
server.tomcat.min-spare-threads=30#文件大小
spring.servlet.multipart.max-file-size=100000000
spring.servlet.multipart.max-request-size=100000000# 启用的application文件
spring.profiles.active=dev
# 表示访问该路径时代表请求静态资源,用户可以直接访问该请求路径中的静态资源
spring.mvc.static-path-pattern=/static/**
spring.mvc.async.request-timeout=60000
########################################################
###FREEMARKER (FreeMarkerAutoConfiguration)
########################################################
spring.freemarker.allow-request-override=false
#本机调试时,配置项template_update_delay=0,这样就关闭了模板缓存。注意线上环境要开启缓存
spring.freemarker.cache=false
spring.freemarker.settings.template_update_delay=0
spring.freemarker.check-template-location=true
spring.freemarker.charset=UTF-8
spring.freemarker.content-type=text/html
spring.freemarker.expose-request-attributes=false
spring.freemarker.expose-session-attributes=false
spring.freemarker.expose-spring-macro-helpers=false
spring.freemarker.prefix=
#若在freemarker获取request对象,在spring boot 在application.properties可以这么配置
spring.freemarker.request-context-attribute=request
#spring.freemarker.settings.*=
spring.freemarker.suffix=.ftl
#template-loader-path表示所有的模板文件都放在该目录下
spring.freemarker.template-loader-path=classpath\:/templates/
#spring.freemarker.view-names= #whitelistofviewnamesthatcanberesolved#static-locations可以自定义静态资源路径,不过会覆盖springboot默认路径
#在这个最末尾的file:${web.upload-path}之所有要加file:是因为指定的是一个具体的硬盘路径,其他的使用classpath指的是系统环境变量
#spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:${web.upload-path}
spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
spring.freemarker.settings.datetime_format=yyyy-MM-dd
#freemarker空值不报异常
spring.freemarker.settings.classic_compatible=true
2.3PageHelper配置和配合通用mapper进行查询
# mybatis 配置
mybatis.type-aliases-package=com.javakly.model
mybatis.mapper-locations=classpath:mapper/*.xml
# tk.mapper配置
mapper.mappers=com.javakly.utils.MyMapper
mapper.not-empty=false
mapper.identity=MYSQL
# pagehelper 分页插件配置
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count\=countSql
pageHelper使用2中方式
方式1:mybatis通用查询模式:自己写查询条件
public List<SysFiles> getAll(SysFiles sysFiles) {if (sysFiles.getPage() != null && sysFiles.getRows() != null) {PageHelper.startPage(sysFiles.getPage(), sysFiles.getRows());}Example example = new Example(SysFiles.class);Example.Criteria criteria = example.createCriteria();if (!StringUtils.isEmpty(sysFiles.getFileName())) {criteria.andLike("file_name", "%" + sysFiles.getFileName() + "%");}if (!StringUtils.isEmpty(sysFiles.getFileType())) {criteria.andLike("file_type", "%" + sysFiles.getFileType() + "%");}return sysFilesMapper.selectByExample(example);}
方式2:通过Weekend包装查询,并通过注解映射字段写查询条件(就是和类名::获取方法表达式)
public List<SysFiles> getAllByWeekend(SysFiles sysFiles) {if (sysFiles.getPage() != null && sysFiles.getRows() != null) {PageHelper.startPage(sysFiles.getPage(), sysFiles.getRows());}Weekend<SysFiles> weekend = Weekend.of(SysFiles.class);WeekendCriteria<SysFiles, Object> criteria = weekend.weekendCriteria();if (!StringUtils.isEmpty(sysFiles.getFileName())) {criteria.andLike(SysFiles::getFileName, "%" + sysFiles.getFileName() + "%");}if (!StringUtils.isEmpty(sysFiles.getFileType())) {criteria.andLike(SysFiles::getFileType, "%" + sysFiles.getFileType() + "%");}return sysFilesMapper.selectByExample(weekend);}
三、本文的pom依赖| MyBatis和通用Mapper及PageHelper jar版本(2020-4-19都是接近最新的版本依赖)
<?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.2.6.RELEASE</version><relativePath /> <!-- lookup parent from repository --></parent><groupId>com.javakly</groupId><artifactId>officeOnlineYZ</artifactId><version>0.0.1-SNAPSHOT</version><name>officeOnlineYZ</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><mybatis.spring.version>2.1.1</mybatis.spring.version><mapper.starter.version>2.0.4</mapper.starter.version><pagehelper.starter.version>1.2.12</pagehelper.starter.version><druid.version>1.1.10</druid.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><!--freemarker --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId></dependency><!--jackson --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency><dependency><groupId>com.fasterxml.jackson.datatype</groupId><artifactId>jackson-datatype-joda</artifactId></dependency><dependency><groupId>com.fasterxml.jackson.module</groupId><artifactId>jackson-module-parameter-names</artifactId></dependency><!--mybatis --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis.spring.version}</version></dependency><!--mapper --><dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot-starter</artifactId><version>${mapper.starter.version}</version></dependency><!--pagehelper --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>${pagehelper.starter.version}</version><exclusions><exclusion><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></exclusion></exclusions></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>${druid.version}</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><dependencies><dependency><groupId>org.springframework</groupId><artifactId>springloaded</artifactId><version>1.2.5.RELEASE</version></dependency></dependencies></plugin><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.2</version><configuration><configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile><overwrite>true</overwrite><verbose>true</verbose></configuration><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><dependency><groupId>tk.mybatis</groupId><artifactId>mapper-generator</artifactId><version>1.0.0</version></dependency></dependencies></plugin></plugins></build></project>
Office在线预览-永中相关推荐
- office 在线预览
office 在线预览 永中office dcs xdocin Spire系列 officeweb365 wps在线预览 idocv onlyoffice office online serve nt ...
- php 永中office在线预览
永中office在我的项目中主要的应用目的是在线预览office文件. 至于为啥不用微软,不知道是不是我的姿势不对,大佬也说在国内可能出现无法转换(误). 复制代码 准备 永中office DCS文档 ...
- office在线预览哪家强?不能播放ppt动画,不能监听翻页?
前言 众所周知,word.excel.ppt 和 pdf 文件在线预览有很多解决方案,但大多无法播放 ppt 动画,或者功能非常单一.这不,最近产品经理闭关修炼三天,提出了如下需求: 监听文档翻页,根 ...
- office转pdf实现office在线预览(aspose)
office转pdf实现office在线预览(aspose) 1. jar包地址 2. 将jar包安装到本地 3. pom文件添加依赖 4. license.xml ① license.xml存放路径 ...
- office在线预览 word在线预览 .net在线预览 文件在线浏览接口
office在线预览 word在线预览 excel在线预览 文件浏览接口服务 支持移动端浏览,只要能使用浏览器上网都可以使用,不需要安装任何第三方工具. 1.word在线预览 excel在线预览,.n ...
- Office在线预览及PDF在线预览的实现方式大集合
一.服务器先转换为PDF,再转换为SWF,最后通过网页加载Flash预览 微软方:利用Office2007以上版本的一个PDF插件SaveAsPDFandXPS.exe可以导出PDF文件,然后再利用免 ...
- Office在线预览及PDF在线预览的实现方式
原文链接:http://www.officeweb365.com/officetoview.html 一.服务器先转换为PDF,再转换为SWF,最后通过网页加载Flash预览 微软方:利用Office ...
- Office在线预览—PPT专场
前言 当下是一个软件.小程序.APP等遍地的时代,互联网已经深入到我们工作.生活的方方面面.只要是企业,总有移动办公需求,出差在外,不方便电脑端查看,文件太大,担心手机内存等. 在线预览可以让我们不经 ...
- 【玩转云函数】腾讯云云函数结合金山文档打造轻量级 Office 在线预览服务
以下内容来自「玩转腾讯云」用户原创文章,已获得授权. 本文介绍下如何使用云函数来实现 Office 办公文件的预览 01. 前言 曾几何时,文档预览曾经很麻烦,小公司需要购买服务器,自行搭建文件服务器 ...
- 服务器系统安装office注意,Office在线预览服务OfficeOnlineServer2017(OOS)安装及常见问题...
服务器需求:Windows Server 2016 R2 或更高,需要两台,一台做域控服务器,一台主服务器 配置要求:域控服务器随意,主服务器最低8G内存,4核CPU,这个配置经常吃满,有条件的越高越 ...
最新文章
- 「2017 山东一轮集训 Day5」距离
- 9 个重量级的云计算(PaaS)平台
- Python 各种运行错误(如:SyntaxError :invalid syntax)
- flask 项目基本框架的搭建
- CRM WebClient UI的external service功能介绍
- 读《程序员修炼之道——从小工到专家》
- samba、nginx服务
- rhel6mysql管理_RHEL 6平台MySQL数据库服务器的安装方法
- 2020年中国河蟹养殖产业市场现状分析,江苏省育苗量、产量与捕捞量全国第一「图」
- 《凤凰架构》读后感 - 演进中的架构
- 关闭MyEclipse右侧工具栏
- 计算机领域伟大成就,十五863计划信息技术领域重大科技工作成就
- 一篇文章教会你利用Python网络爬虫抓取王者荣耀图片
- bio 生信博主网站 blog
- os的概念,基本特征
- 民生保险“链”接链家地产,2018向家告白赢取爱疯X
- 进程切换之context_switch详解
- STM32H750使用Jlink烧录QSPI flash配置
- IDE和ACHI区别
- 弱电线缆选型及用量计算方法