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