return zip

This commit is contained in:
Ale
2025-05-13 13:38:01 +02:00
parent d7881a4461
commit c644fc492d

View File

@@ -2,6 +2,7 @@ const express = require('express');
const multer = require('multer');
const Joi = require('joi');
const pdfProcessor = require('./pdfProcessor');
const archiver = require('archiver');
const app = express();
const port = process.env.PORT || 3000;
@@ -39,6 +40,25 @@ const requestSchema = Joi.object({
// Route for processing PDF
app.post('/process-pdf', upload.single('file'), async (req, res) => {
// Create a zip archive
const archive = archiver('zip', {
zlib: { level: 9 } // Maximum compression
});
// Handle archive warnings
archive.on('warning', function(err) {
if (err.code === 'ENOENT') {
console.warn('Archive warning:', err);
} else {
throw err;
}
});
// Handle archive errors
archive.on('error', function(err) {
throw err;
});
try {
// Parse metadata from form field
let metadata;
@@ -72,22 +92,29 @@ app.post('/process-pdf', upload.single('file'), async (req, res) => {
metadata
);
// Convert files to base64 and prepare response
const processedFiles = outputFiles.map(file => ({
filename: file.filename,
content: file.buffer.toString('base64'),
contentType: 'application/pdf'
}));
// Set up response headers
res.attachment('processed_pdfs.zip');
archive.pipe(res);
// Return the processed files
res.json({
message: 'PDF processed successfully',
files: processedFiles
// Add each PDF to the archive
outputFiles.forEach(file => {
const buffer = Buffer.from(file.buffer);
archive.append(buffer, { name: file.filename });
});
// Finalize archive
await archive.finalize();
} catch (error) {
console.error('Error processing PDF:', error);
res.status(500).json({ error: error.message });
// If headers haven't been sent, send error response
if (!res.headersSent) {
console.error('Error processing PDF:', error);
res.status(500).json({ error: error.message });
} else {
// If headers were sent (streaming started), end the response
console.error('Error after stream started:', error);
res.end();
}
}
});