61 lines
1.7 KiB
JavaScript
61 lines
1.7 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
const axios = require('axios');
|
|
const logger = require('../utils/logger');
|
|
|
|
class PdfStorage {
|
|
constructor(baseDir) {
|
|
this.baseDir = baseDir || path.join(process.cwd(), 'data', 'pdfs');
|
|
this.sessionFile = path.join(this.baseDir, 'sessions.json');
|
|
this.ensureDir();
|
|
}
|
|
|
|
ensureDir() {
|
|
fs.mkdirSync(this.baseDir, { recursive: true });
|
|
}
|
|
|
|
async downloadPdf(url) {
|
|
const response = await axios.get(url, { responseType: 'arraybuffer' });
|
|
const fileName = `pdf-${Date.now()}-${Math.random().toString(36).slice(2)}.pdf`;
|
|
const targetPath = path.join(this.baseDir, fileName);
|
|
fs.writeFileSync(targetPath, response.data);
|
|
return targetPath;
|
|
}
|
|
|
|
writeImageFile(buffer, pageIndex) {
|
|
const fileName = `page-${pageIndex}-${Date.now()}-${Math.random().toString(36).slice(2)}.png`;
|
|
const targetPath = path.join(this.baseDir, fileName);
|
|
fs.writeFileSync(targetPath, buffer);
|
|
return targetPath;
|
|
}
|
|
|
|
loadSessions() {
|
|
try {
|
|
if (!fs.existsSync(this.sessionFile)) return [];
|
|
const raw = fs.readFileSync(this.sessionFile, 'utf8');
|
|
return JSON.parse(raw);
|
|
} catch (e) {
|
|
logger.error('Erreur lors du chargement des sessions PDF persistées:', e);
|
|
return [];
|
|
}
|
|
}
|
|
|
|
saveSessions(data) {
|
|
try {
|
|
fs.writeFileSync(this.sessionFile, JSON.stringify(data, null, 2), 'utf8');
|
|
} catch (e) {
|
|
logger.error('Erreur lors de la sauvegarde des sessions PDF:', e);
|
|
}
|
|
}
|
|
|
|
deleteFiles(paths) {
|
|
paths.forEach(p => {
|
|
if (p && fs.existsSync(p)) {
|
|
try { fs.unlinkSync(p); } catch (e) { logger.warn('Erreur suppression fichier PDF/PNG', e); }
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
module.exports = PdfStorage;
|