使用nodejs功能化krpano流程回顾
发布: 2019-12-17 22:54:43标签: nodeJs
一、使用nodejs功能化krpano 流程简介
注册krpanotools(不注册会有水印)
01# 推荐购买,当然网上还是可以找到注册的密钥02./krpanotools register ******
复制代码- 使用nodejs运行执行krpanotool,进行文件切割,具体config配置介绍
01 ./krpanotools makepano -config=config文件路径 全景图片路径
复制代码循环上传七牛生成切割后全景图片,然后使用根据路径使用代码拼接xml
制作docker镜像进行部署
二、代码片段
1. nodejs执行krpanotools切割全景图片
切割
10000x5000
的全景一般需要18-22s
的时间,图片越小时间越少
01const execa = require("execa")02const krpanotools = 'krpanotools 路径'03const config = `config 路径`04module.export = async () => {05 const {stderr} = await execa(shell, {06 shell: true07 })08 return stderr09}
复制代码2. 获取全景文件MD5,来作为切割文件前缀的key,也可以redis来缓存,提高性能
01// 获取文件md502const crypto = require("crypto");03const fs = require("fs");0405module.exports = url => {06 return new Promise(reslove => {07 const md5sum = crypto.createHash("md5");08 let stream = fs.createReadStream(url);09 stream.on("data", chunk => {10 md5sum.update(chunk);11 });12 stream.on("end", function() {13 let fileMd5 = md5sum.digest("hex");14 reslove(fileMd5);15 });16 });17};
复制代码3. 执行文件夹循环上传七牛
01// 指定目录上传02module.exports = async (staticPath, prefix) => {03 const promiseList = [];04 // 上传文件夹05 function uploadDir(dirPath) {06 const files = fs.readdirSync(dirPath);07 // 遍历目录下的内容08 files.forEach(item => {09 let path = `${dirPath}/${item}`;10 const stats = fs.statSync(path);11 if (stats.isDirectory()) {12 uploadDir(path);13 } else {14 // 上传全景的key15 const key = path.replace(staticPath, prefix);16 promiseList.push(uploadFile(key, path));17 }18 });19 return promiseList;20 }21 // 等待所有文件上传完成22 return Promise.all(uploadDir(staticPath));23};
复制代码4. 服务器切割图片比较慢,打包zip后在服务器批量上传,使用了一个插件unzipper
三、Dockerfile
FROM ubuntu:18.04
LABEL author=luzhongk@126.com
ENV APP_ROOT /var/www/
# 注册krpanotools的key
ENV krpanoToken ******
# 复制文件之后krpanotools位置
ENV krpanotools /var/www/krpano/krpanotools
WORKDIR ${APP_ROOT}
# 注册krpano
RUN chmod +x ${krpanotools} && ${krpanotools} register ${krpanoToken}
# 安装node
RUN apt-get update && apt-get install nodejs -y && apt-get install npm -y
# 安装node依赖环境,分开拷贝借助缓存优化
COPY ./package.json ${APP_ROOT}
RUN npm config set registry http://registry.npm.taobao.org/ & npm i
# 复制项目
COPY . ${APP_ROOT}
EXPOSE 3000
CMD ["npm", "start"]