一.该插件1点几版本以下的有问题,如果生成截图报错会导致没有关闭截图,导致进程一直都在(2点几版本的没有这个问题,加try)
二.
方法一
const Pageres = require('pageres');
const path = require("path")
const fs = require("fs")
async function screenshot(req, res) {
const { url,width,height } = req.query
if (!url||!width||!height) {
return res.json({
code: 1000,
msg: "缺少参数"
})
}
const fileName = new Date().getTime()
// width*height 是分辨率
await new Pageres({
delay: 0,
launchOptions:{
args:['--no-sandbox', '--disable-setuid-sandbox']
}
})
.src(url, [`${width}x${height}`], {
filename: `${fileName}`
})
.dest(__dirname)
.run();
const options = {
root: path.join(__dirname),
dotfiles: 'deny',
headers: {
'x-timestamp': Date.now(),
'x-sent': true
}
}
res.sendFile(fileName + ".png", options, function (err) {
fs.unlink(path.join(__dirname, fileName + ".png"), (err) => {
if (err) {
console.error('删除图片压缩文件失败:', err);
}
});
if (err) {
res.json({
code: 1001,
msg: "截图失败"
})
}
})
}
module.exports = {
screenshot
}
方法二:
const captureWebsite = require("capture-website");
async function screenshot(req, res) {
const { url,width,height } = req.query
if (!url||!width||!height) {
return res.json({
code: 1000,
msg: "缺少参数"
})
}
try {
//改成输出流的方式,captureWebsite.file()这个会生成文件
const imgBuffer = await captureWebsite.buffer(url,{
width:Number(width),//要传数字
height:Number(height),//要传数字
delay: 2,
scaleFactor: 1,//这个参数设置为1,默认值2(设置为2的时候截图会比较慢,截图50000高度的页面用时差不多25秒,设置为1的时候用时8秒,而且设置为2的时候截图50000高度的页面生成出来有一半是空白)
launchOptions:{//在linux运行要加这个参数,不加会报 Error: Failed to launch the browser process!
args:['--no-sandbox', '--disable-setuid-sandbox'],
}
});
//返回图片
res.set('Content-Type', 'image/png;');
res.send(imgBuffer);
}catch (e) {
console.error(e,"screenshot-error")
res.json({
code: 1002,
msg: "截图失败"
})
}
}
module.exports = {
screenshot,
};