说起截图,大家都很熟悉,win电脑自带截图 【shift + win + s】,还可以用微信,浏览器截图插件等等很多。js操作的话,可以用转canvas,svg两种方式,比较熟悉的库就是 html2canvas。
截图服务,就是在服务端操作截图,截图的目的是截取最新的页面
截图服务技术要点是 node puppeteer aws-sdk pm2
node: 提供node环境,起node服务器
puppeteer:谷歌浏览器自行开发了Chrome Headless特性,同时推出了puppeteer,可以理解成我们日常使用的Chrome的无界面版本以及对其进行操控的js接口套装
aws-sdk: 上传文件到云存储的sdk,兼容s3协议,比如可以上传ali-os,minio,腾讯云,华为云等
pm2: pm2是node进程管理工具,可以利用它来简化很多node应用管理的繁琐任务,如性能监控、自动重启、负载均衡等
以上是简单介绍
废话不多说,上代码
起服务
const express = require("express");
const router = express.Router();
const http = require("http");
const server = http.createServer(app);
server.setTimeout(0); //设置超时时间 0是不会超时
// 创建全局任务队列
const Task = require("./lib/task");
global.task = new Task();
router.post("/snapshot", async (req, res, next) => {
const payload = req.body;
const uid = uuid();
// 增加默认值
payload.type = payload.type ? payload.type : "page";
// 校验参数
if (!valid(payload, uid)) {
return res.json({
stateCode: "5000",
retMessage: "参数不合法",
});
}
// task 截图任务加到了global对象上
global.task.add({ payload, uid, taskType: "snapshot" });
// 将后端生成的业务id返回,表示接受成功
res.json({
stateCode: "3000",
retMessage: `任务${payload.bussnessId}接收成功`,
});
});
server.listen(3000, function(){
console.info('The server is running on port 3000.');
});