const express = require('express'); const multer = require('multer'); const JSZip = require('jszip'); const { createCanvas } = require('canvas'); const fs = require('fs'); const app = express(); // 设置 multer 用于处理文件上传 const storage = multer.memoryStorage(); const upload = multer({ storage: storage }); app.use(express.json()); app.use(express.urlencoded({ extended: true })); app.post('/upload', upload.single('file'), async (req, res) => { try { const file = req.file; const fileName = file.originalname; const fileType = file.mimetype; const fileBuffer = file.buffer; // 输出接收到的文件信息 console.log(`File Name: ${fileName}`); console.log(`File Type: ${fileType}`); console.log(`File Size: ${fileBuffer.length} bytes`); // 压缩文件成 zip 格式 const zip = new JSZip(); zip.file(fileName, fileBuffer); const zipBuffer = await zip.generateAsync({ type: 'nodebuffer' }); // 创建包含文件信息的表格图片 const width = 800; const height = 600; const canvas = createCanvas(width, height); const ctx = canvas.getContext('2d'); // 设置背景为白色 ctx.fillStyle = '#FFFFFF'; ctx.fillRect(0, 0, width, height); // 设置文本颜色为黑色,并绘制文本 ctx.fillStyle = '#000000'; ctx.font = '20px Arial'; const text = ` File Name: ${fileName} File Type: ${fileType} File Size: ${fileBuffer.length} bytes Created At: ${new Date().toLocaleString()} Modified At: ${new Date().toLocaleString()} `; ctx.fillText(text.trim(), 50, 100); // 将 canvas 转换为 JPEG 图片 const rawImageData = canvas.toBuffer('image/jpeg', { quality: 0.75 }); // 将包含信息的图片和生成的 zip 打包 const finalBuffer = Buffer.concat([rawImageData, zipBuffer]); // 生成新的文件名,添加后缀 -piczip const outputFileName = fileName.replace(/\.[^/.]+$/, "") + '-piczip.jpg'; // 返回新的隐藏 zip 文件的新图片文件 res.setHeader('Content-Type', 'image/jpeg'); res.setHeader('Content-Disposition', `attachment; filename="${outputFileName}"`); res.send(finalBuffer); } catch (error) { console.error(error); res.status(500).send('An error occurred'); } }); const PORT = process.env.PORT || 7860; app.listen(PORT, () => { console.log(`Server running on port ${PORT}`); });