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 multer = require('multer');
const Joi = require('joi'); const Joi = require('joi');
const pdfProcessor = require('./pdfProcessor'); const pdfProcessor = require('./pdfProcessor');
const archiver = require('archiver');
const app = express(); const app = express();
const port = process.env.PORT || 3000; const port = process.env.PORT || 3000;
@@ -39,6 +40,25 @@ const requestSchema = Joi.object({
// Route for processing PDF // Route for processing PDF
app.post('/process-pdf', upload.single('file'), async (req, res) => { 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 { try {
// Parse metadata from form field // Parse metadata from form field
let metadata; let metadata;
@@ -72,22 +92,29 @@ app.post('/process-pdf', upload.single('file'), async (req, res) => {
metadata metadata
); );
// Convert files to base64 and prepare response // Set up response headers
const processedFiles = outputFiles.map(file => ({ res.attachment('processed_pdfs.zip');
filename: file.filename, archive.pipe(res);
content: file.buffer.toString('base64'),
contentType: 'application/pdf'
}));
// Return the processed files // Add each PDF to the archive
res.json({ outputFiles.forEach(file => {
message: 'PDF processed successfully', const buffer = Buffer.from(file.buffer);
files: processedFiles archive.append(buffer, { name: file.filename });
}); });
// Finalize archive
await archive.finalize();
} catch (error) { } catch (error) {
console.error('Error processing PDF:', error); // If headers haven't been sent, send error response
res.status(500).json({ error: error.message }); 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();
}
} }
}); });