piczip / index.js
nagose's picture
Update index.js
56bfde3 verified
raw
history blame
2.58 kB
const express = require('express');
const multer = require('multer');
const JSZip = require('jszip');
const jpeg = require('jpeg-js');
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' });
console.log(`Zip OK File Name: ${fileName}`);
// 创建包含文件信息的表格图片
const width = 800;
const height = 600;
const frameData = Buffer.alloc(width * height * 4);
const text = `
File Name: ${fileName}
File Type: ${fileType}
File Size: ${fileBuffer.length} bytes
Created At: ${new Date().toLocaleString()}
Modified At: ${new Date().toLocaleString()}
`;
// 填充图片数据
frameData.fill(0); // 黑色背景
// 在图片上绘制文本(这里仅为示例,实际应用中需要更复杂的文本绘制方法)
const textBuffer = Buffer.from(text);
frameData.set(textBuffer, 0); // 将文本内容写入图片数据的开始位置
const imageData = {
data: frameData,
width: width,
height: height,
};
const rawImageData = jpeg.encode(imageData, 50).data;
console.log(`JPG OK File Name: ${fileName}`);
// 将包含信息的图片和生成的 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}`);
});