文档在线预览项目解决方案,项目使用流行的spring boot搭建,易上手和部署。万能的文件预览开源项目,基本支持主流文档格式预览,如:
基于当前良好的架构模式,支持的文件类型在进一步丰富中
请善待公共服务,会不定时停用
Github:https://github.com/kekingcn/kkFileView
git clone https://gitee.com/kekingcn/file-online-preview.git
由于 kkfileview 的基础运行环境很少变动且制作耗时较久,而 kkfileview 本身代码开发会频繁改动,因此把制作其 Docker 镜像的步骤拆分为两次:
首先制作 kkfileview 的基础镜像(kkfileview-base)。
然后使用 kkfileview-base 作为基础镜像进行构建,加快 kkfileview docker 镜像构建与发布。
docker buildx
支持在一台机器上构建出多种平台架构的镜像。推荐使用该能力进行跨平台的镜像构建。
例如,执行 docker buildx build
命令时加上 --platform=linux/arm64
参数即可构建出 arm64 架构镜像。这极大方便了那些没有arm64 架构机器却想构建 arm64 架构镜像的用户。
当前本项目仅支持构建 linux/amd64 和 linux/arm64 两种平台架构的镜像
buildx 的 builder driver 可以使用默认的docker
类型, 若使用docker-container
类型可以支持并行构建多种架构, 本文不再赘述, 有兴趣可以自行了解。参考 Docker Buildx | Docker Documentation
前提要求
以当前机器为 amd64 (x86_64)架构为例。需要开启 docker 的 buildx 特性,以及开启 Linux 的 QEMU 用户模式:
使用 WSL2 的 Windows 用户如果安装了最新的 DockerDesktop, 则这些前提要求已满足, 无需额外下述设置。
安装 docker buildx 客户端插件:
docker 版本要求 >=19.03
若已安装, 则跳过。详情参考 https://github.com/docker/buildx
开启 QEMU 的用户模式功能, 并安装其它平台的模拟器:
Linux 内核要求 >=4.8
使用 tonistiigi/binfmt
镜像可快速开启并安装模拟器,执行下面命令:
docker run --privileged --rm tonistiigi/binfmt --install all
现在就可以愉快地开始构建了,构建命令示例:
docker buildx build --platform=linux/amd64,linux/arm64 -t keking/kkfileview-base:4.4.0 --push .
cd 你克隆文件夹/file-online-preview/docker/kkfileview-base
#执行如下,等待构建kkfileview-base
docker buildx build --platform=linux/amd64 -t keking/kkfileview-base:4.4.0 --push .
cd 你克隆文件夹/file-online-preview
#编译打包
mvn clean package -DskipTests -Prelease
#执行如下开始构建 kkfileview
docker build -t keking/kkfileview .
docker run -it -d --privileged=true --name="kkFileView" -e KK_BASE_URL="你的外部访问地址" -e KK_CONTEXT_PATH="/你的访问前缀" keking/kkfileview:latest
/**
* 访问预览地址
**/
@RestController
@RequestMapping("/preview")
public class KkFileViewController {
@Autowired
private RestTemplate restTemplate;
//访问的地址
final String URL = "http://192.168.199.105:9000/test/test-upload.pdf";
// kkFileView的启动地址,这里是以上面启动的默认为例
final String BASE_URL = "http://127.0.0.1:8012/";
/**
* 获取预览地址
**/
@RequestMapping("/get")
public String get() {
return BASE_URL+"onlinePreview?url="+Base64.encodeBase64String(URL.getBytes());
}
/**
* 提前解析文件
**/
@RequestMapping("/addTask")
public String addTask() {
String response = restTemplate.getForObject(BASE_URL+"addTask?url="+Base64.encodeBase64String(URL.getBytes()), String.class);
return response;
}
}
2.JS
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/js-base64@3.6.0/base64.min.js"></script>
var url = 'http://127.0.0.1:8080/file/test.txt'; //要预览文件的访问地址
window.open('http://127.0.0.1:8012/onlinePreview?url='+encodeURIComponent(Base64.encode(url)));