截图服务+ oss上传

280 阅读1分钟

说起截图,大家都很熟悉,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.');
});

更新中