This commit is contained in:
nBiqoz
2025-07-28 21:15:41 +02:00
parent dc734e08f0
commit 7a086c4749
4 changed files with 169 additions and 27 deletions

View File

@@ -8,13 +8,35 @@ export async function POST(req: NextRequest) {
try {
const formData = await req.formData();
const file = formData.get("file") as File | null;
// ✅ Validation améliorée du fichier
if (!file) {
return NextResponse.json(
{ error: "Aucun fichier reçu." },
{ status: 400 }
);
}
console.log("📁 Fichier reçu:", file.name, "| Type:", file.type);
// Vérifications supplémentaires
if (file.size === 0) {
return NextResponse.json(
{ error: "Le fichier est vide (0 bytes)." },
{ status: 400 }
);
}
if (file.size > 50 * 1024 * 1024) { // 50MB
return NextResponse.json(
{ error: "Le fichier est trop volumineux (max 50MB)." },
{ status: 400 }
);
}
console.log("📁 Fichier reçu:", {
name: file.name,
type: file.type,
size: `${(file.size / 1024 / 1024).toFixed(2)} MB`,
lastModified: new Date(file.lastModified).toISOString()
});
let fileContent = "";
const fileType = file.type;
@@ -22,25 +44,56 @@ export async function POST(req: NextRequest) {
// --- LOGIQUE D'EXTRACTION DE TEXTE ---
if (fileType === "application/pdf") {
console.log("📄 Traitement PDF en cours...");
console.log("📊 Taille du fichier:", file.size, "bytes");
try {
const buffer = Buffer.from(await file.arrayBuffer());
console.log("📦 Buffer créé, taille:", buffer.length);
const data = await pdf(buffer);
fileContent = data.text || "";
console.log("✅ Extraction PDF réussie, longueur:", fileContent.length);
// ✅ Vérification supplémentaire
console.log("✅ Extraction PDF réussie, longueur:", fileContent.length);
console.log("📄 Nombre de pages:", data.numpages);
console.log(" Info PDF:", data.info?.Title || "Titre non disponible");
// ✅ Vérification améliorée
if (!fileContent.trim()) {
console.log("⚠️ PDF vide ou non lisible");
console.log("⚠️ PDF vide - Détails:", {
pages: data.numpages,
metadata: data.metadata,
info: data.info,
extractedLength: fileContent.length
});
// Détecter si c'est un PDF scanné
const isScanned = data.info?.Creator?.includes('RICOH') ||
data.info?.Creator?.includes('Canon') ||
data.info?.Creator?.includes('HP') ||
data.info?.Producer?.includes('Scanner') ||
(data.numpages > 0 && fileContent.length < 50);
const errorMessage = isScanned
? `Ce PDF semble être un document scanné (créé par: ${data.info?.Creator}). Les documents scannés contiennent des images de texte, pas du texte extractible.\n\n💡 Solutions :\n- Utilisez un PDF créé depuis Word/Google Docs\n- Appliquez l'OCR avec Adobe Acrobat\n- Recréez le document au lieu de le scanner`
: `Le PDF ne contient pas de texte extractible.\n\nCela peut être dû à :\n- PDF scanné (image uniquement)\n- PDF protégé\n- PDF avec texte en images\n- Nombre de pages: ${data.numpages}`;
return NextResponse.json(
{ error: "Le PDF ne contient pas de texte extractible ou est protégé." },
{ error: errorMessage },
{ status: 400 }
);
}
} catch (pdfError) {
console.error("❌ Erreur PDF détaillée:", pdfError);
console.error("❌ Erreur PDF détaillée:", {
message: pdfError instanceof Error ? pdfError.message : "Erreur inconnue",
stack: pdfError instanceof Error ? pdfError.stack : undefined,
fileName: file.name,
fileSize: file.size,
fileType: file.type
});
return NextResponse.json(
{
error: `Erreur traitement PDF: ${pdfError instanceof Error ? pdfError.message : "Erreur inconnue"}. Vérifiez que le PDF n'est pas protégé ou corrompu.`,
error: `Impossible de traiter ce PDF (${file.name}). Erreur: ${pdfError instanceof Error ? pdfError.message : "Erreur inconnue"}. Vérifiez que le PDF n'est pas protégé, corrompu ou scanné.`,
},
{ status: 500 }
);