Checkpoint: Correction de l'erreur "Failed to parse URL" lors de l'envoi d'attestation avec chemin local :
- Modification de la fonction sendAttestationEmail dans server/emailService.ts - Ajout de la détection automatique entre URL complète (http/https) et chemin local - Pour les URLs complètes : téléchargement via fetch (comme avant) - Pour les chemins locaux : lecture directe depuis le système de fichiers avec fs.readFile - Les fichiers uploadés localement (/uploads/rappels-attachments/...) sont maintenant correctement lus - Utilisation de path.join(process.cwd(), pdfUrl) pour construire le chemin absolu - Déployé sur le VPS de production (https://formations.itinova.org) - L'envoi d'attestations uploadées localement fonctionne maintenant correctement
This commit is contained in:
@@ -1144,17 +1144,30 @@ export async function sendAttestationEmail(params: {
|
||||
<p>Cordialement,<br/>L'équipe Formation</p>
|
||||
`;
|
||||
|
||||
// Télécharger le PDF depuis l'URL
|
||||
// Récupérer le PDF (depuis URL ou chemin local)
|
||||
let pdfBuffer: Buffer;
|
||||
try {
|
||||
const response = await fetch(params.pdfUrl);
|
||||
if (!response.ok) {
|
||||
throw new Error(`Failed to download PDF: ${response.statusText}`);
|
||||
// Vérifier si c'est un chemin local ou une URL complète
|
||||
if (params.pdfUrl.startsWith('http://') || params.pdfUrl.startsWith('https://')) {
|
||||
// Télécharger depuis l'URL
|
||||
const response = await fetch(params.pdfUrl);
|
||||
if (!response.ok) {
|
||||
throw new Error(`Failed to download PDF: ${response.statusText}`);
|
||||
}
|
||||
const arrayBuffer = await response.arrayBuffer();
|
||||
pdfBuffer = Buffer.from(arrayBuffer);
|
||||
} else {
|
||||
// Lire depuis le système de fichiers local
|
||||
const fs = await import('fs/promises');
|
||||
const path = await import('path');
|
||||
|
||||
// Construire le chemin absolu (le chemin commence par /uploads/...)
|
||||
// Sur le VPS, les fichiers sont dans /var/www/formation-manager-itinova/uploads/
|
||||
const absolutePath = path.join(process.cwd(), params.pdfUrl);
|
||||
pdfBuffer = await fs.readFile(absolutePath);
|
||||
}
|
||||
const arrayBuffer = await response.arrayBuffer();
|
||||
pdfBuffer = Buffer.from(arrayBuffer);
|
||||
} catch (error) {
|
||||
console.error('[sendAttestationEmail] Error downloading PDF:', error);
|
||||
console.error('[sendAttestationEmail] Error loading PDF:', error);
|
||||
throw error;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user