概述
優點:很便宜(一個域名一年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 generatorConfiguration
PUBLIC "-//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>