From c644fc492dbbeff92379d9e0d0a46396cc6bfd41 Mon Sep 17 00:00:00 2001 From: Ale Date: Tue, 13 May 2025 13:38:01 +0200 Subject: [PATCH] return zip --- src/server.js | 51 +++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 39 insertions(+), 12 deletions(-) diff --git a/src/server.js b/src/server.js index 9d16023..2e8e723 100644 --- a/src/server.js +++ b/src/server.js @@ -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(); + } } });