printserver/server.js

147 lines
4.5 KiB
JavaScript
Raw Permalink Normal View History

2025-02-16 23:19:52 +08:00
const express = require('express');
const multer = require('multer');
const path = require('path');
const print = require('./print');
const fs = require('fs');
const util = require('util');
const exec = require('child_process').exec;
const app = express();
const port = 3000;
// 设置multer存储引擎
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads/');
},
filename: function (req, file, cb) {
cb(null, Date.now() + path.extname(file.originalname)); // 重命名文件以避免冲突
}
});
const upload = multer({ storage: storage });
// 创建uploads目录
const dir = './uploads';
if (!fs.existsSync(dir)){
fs.mkdirSync(dir);
}
// 提供静态文件服务
app.use(express.static('public'));
// 定义文件上传路由
app.post('/upload', upload.single('file'), (req, res) => {
if (!req.file) {
return res.status(400).send('No file uploaded.');
}
const filePath = req.file.path;
const printOption = req.body.printOption;
const pages = req.body.pages;
print.printFile(filePath, printOption, pages, (err) => {
if (err) {
return res.status(500).send('Error printing file: ' + err.message);
}
res.json({ message: 'File uploaded and printed successfully.', progress: 0 });
});
});
// 定义打印机配置路由
app.post('/configure-printer', express.json(), (req, res) => {
const printerName = req.body.printerName;
if (!printerName) {
return res.status(400).send('Printer name is required.');
}
// 读取现有配置
let config = {};
const configFilePath = './printerConfig.json';
if (fs.existsSync(configFilePath)) {
const configFileContent = fs.readFileSync(configFilePath, 'utf8');
config = JSON.parse(configFileContent);
}
// 更新配置
config.printerName = printerName;
// 写入配置文件
fs.writeFileSync(configFilePath, JSON.stringify(config, null, 2));
// 应用配置到系统
const applyConfig = (config) => {
return new Promise((resolve, reject) => {
// 假设使用lpadmin命令来设置默认打印机
exec(`lpadmin -d ${config.printerName}`, (error, stdout, stderr) => {
if (error) {
reject(new Error(`Error applying configuration: ${stderr}`));
return;
}
resolve(`Configuration applied successfully: ${config.printerName}`);
});
});
};
applyConfig(config)
.then(message => {
res.json({ message });
})
.catch(error => {
res.status(500).json({ error: error.message });
});
});
// 获取当前配置
app.get('/get-config', (req, res) => {
const configFilePath = './printerConfig.json';
if (fs.existsSync(configFilePath)) {
const configFileContent = fs.readFileSync(configFilePath, 'utf8');
const config = JSON.parse(configFileContent);
res.json(config);
} else {
res.json({});
}
});
// 获取可用打印机列表
app.get('/get-printers', (req, res) => {
exec('lpstat -p -d', (error, stdout, stderr) => {
if (error) {
return res.status(500).send('Error getting printers: ' + stderr);
}
const printers = stdout.split('\n').map(line => line.trim()).filter(line => line.startsWith('printer'));
const printerList = printers.map(printer => printer.split(' ')[1]);
res.json(printerList);
});
});
// 获取打印机状态
app.get('/get-printer-status', (req, res) => {
exec('lpstat -p', (error, stdout, stderr) => {
if (error) {
return res.status(500).send('Error getting printer status: ' + stderr);
}
const statusLines = stdout.split('\n').map(line => line.trim());
let status = '未配置';
if (statusLines.some(line => line.includes('disabled'))) {
status = '未开机';
} else if (statusLines.some(line => line.includes('printing'))) {
status = '打印中';
} else if (statusLines.some(line => line.includes('ready'))) {
status = '就绪';
}
res.json({ status });
});
});
// 获取打印进度
app.get('/get-print-progress', (req, res) => {
// 假设有一个全局变量来跟踪打印进度
let printProgress = 0; // 这里需要根据实际情况获取打印进度
res.json({ progress: printProgress });
});
app.listen(port,'0.0.0.0', () => {
console.log(`Server running at http://localhost:${port}`);
});