return zip
This commit is contained in:
@@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user