diff --git a/backend/server.js b/backend/server.js
index 7df059e..47d6ac8 100644
--- a/backend/server.js
+++ b/backend/server.js
@@ -33,16 +33,52 @@ function generateFolderHash() {
return crypto.randomBytes(16).toString('hex')
}
+// Fonction pour obtenir le type MIME à partir de l'extension
+function getMimeType(ext) {
+ const mimeTypes = {
+ '.pdf': 'application/pdf',
+ '.jpg': 'image/jpeg',
+ '.jpeg': 'image/jpeg',
+ '.png': 'image/png',
+ '.tiff': 'image/tiff'
+ }
+ return mimeTypes[ext.toLowerCase()] || 'application/octet-stream'
+}
+
// Fonction pour créer la structure de dossiers
function createFolderStructure(folderHash) {
- const folderPath = path.join('uploads', folderHash)
- const cachePath = path.join('cache', folderHash)
+ console.log(`[FOLDER] Création de la structure pour le hash: ${folderHash}`)
+ console.log(`[FOLDER] Répertoire de travail: ${process.cwd()}`)
+
+ // Créer les dossiers racines s'ils n'existent pas
+ const uploadsDir = 'uploads'
+ const cacheDir = 'cache'
+
+ console.log(`[FOLDER] Vérification de l'existence de ${uploadsDir}: ${fs.existsSync(uploadsDir)}`)
+ console.log(`[FOLDER] Vérification de l'existence de ${cacheDir}: ${fs.existsSync(cacheDir)}`)
+
+ if (!fs.existsSync(uploadsDir)) {
+ fs.mkdirSync(uploadsDir, { recursive: true })
+ console.log(`[FOLDER] Dossier racine créé: ${uploadsDir}`)
+ }
+ if (!fs.existsSync(cacheDir)) {
+ fs.mkdirSync(cacheDir, { recursive: true })
+ console.log(`[FOLDER] Dossier racine créé: ${cacheDir}`)
+ }
+
+ const folderPath = path.join(uploadsDir, folderHash)
+ const cachePath = path.join(cacheDir, folderHash)
+
+ console.log(`[FOLDER] Chemin du dossier uploads: ${folderPath}`)
+ console.log(`[FOLDER] Chemin du dossier cache: ${cachePath}`)
if (!fs.existsSync(folderPath)) {
fs.mkdirSync(folderPath, { recursive: true })
+ console.log(`[FOLDER] Dossier uploads créé: ${folderPath}`)
}
if (!fs.existsSync(cachePath)) {
fs.mkdirSync(cachePath, { recursive: true })
+ console.log(`[FOLDER] Dossier cache créé: ${cachePath}`)
}
return { folderPath, cachePath }
@@ -52,7 +88,7 @@ function createFolderStructure(folderHash) {
function saveJsonCacheInFolder(folderHash, fileHash, result) {
const { cachePath } = createFolderStructure(folderHash)
const cacheFile = path.join(cachePath, `${fileHash}.json`)
-
+
try {
fs.writeFileSync(cacheFile, JSON.stringify(result, null, 2))
console.log(`[CACHE] Résultat sauvegardé dans le dossier ${folderHash}: ${fileHash}`)
@@ -67,7 +103,7 @@ function saveJsonCacheInFolder(folderHash, fileHash, result) {
function getJsonCacheFromFolder(folderHash, fileHash) {
const cachePath = path.join('cache', folderHash)
const cacheFile = path.join(cachePath, `${fileHash}.json`)
-
+
if (fs.existsSync(cacheFile)) {
try {
const data = fs.readFileSync(cacheFile, 'utf8')
@@ -88,10 +124,10 @@ function listFolderResults(folderHash) {
if (!fs.existsSync(cachePath)) {
return []
}
-
+
const files = fs.readdirSync(cachePath)
const results = []
-
+
for (const file of files) {
if (file.endsWith('.json')) {
const fileHash = path.basename(file, '.json')
@@ -104,7 +140,7 @@ function listFolderResults(folderHash) {
}
}
}
-
+
return results
}
@@ -1075,8 +1111,12 @@ app.delete('/api/cache/:hash', (req, res) => {
// Route pour créer un nouveau dossier
app.post('/api/folders', (req, res) => {
try {
+ console.log('[FOLDER] Début de la création d\'un nouveau dossier')
const folderHash = generateFolderHash()
- createFolderStructure(folderHash)
+ console.log(`[FOLDER] Hash généré: ${folderHash}`)
+
+ const result = createFolderStructure(folderHash)
+ console.log(`[FOLDER] Structure créée:`, result)
console.log(`[FOLDER] Nouveau dossier créé: ${folderHash}`)
@@ -1099,9 +1139,9 @@ app.get('/api/folders/:folderHash/results', (req, res) => {
try {
const { folderHash } = req.params
const results = listFolderResults(folderHash)
-
+
console.log(`[FOLDER] Résultats récupérés pour le dossier ${folderHash}: ${results.length} fichiers`)
-
+
res.json({
success: true,
folderHash,
@@ -1122,18 +1162,18 @@ app.get('/api/folders/:folderHash/files/:fileHash', (req, res) => {
try {
const { folderHash, fileHash } = req.params
const folderPath = path.join('uploads', folderHash)
-
+
if (!fs.existsSync(folderPath)) {
return res.status(404).json({ success: false, error: 'Dossier non trouvé' })
}
-
+
const files = fs.readdirSync(folderPath)
const targetFile = files.find(file => file.startsWith(fileHash))
-
+
if (!targetFile) {
return res.status(404).json({ success: false, error: 'Fichier non trouvé' })
}
-
+
const filePath = path.join(folderPath, targetFile)
res.sendFile(path.resolve(filePath))
} catch (error) {
@@ -1150,17 +1190,17 @@ app.post('/api/folders/default', async (req, res) => {
try {
const folderHash = generateFolderHash()
const { folderPath, cachePath } = createFolderStructure(folderHash)
-
+
console.log(`[FOLDER] Création du dossier par défaut: ${folderHash}`)
-
+
// Charger les fichiers de test dans le dossier
const testFilesDir = path.join(__dirname, '..', 'test-files')
if (fs.existsSync(testFilesDir)) {
const testFiles = fs.readdirSync(testFilesDir)
- const supportedFiles = testFiles.filter(file =>
+ const supportedFiles = testFiles.filter(file =>
['.pdf', '.jpg', '.jpeg', '.png', '.tiff'].includes(path.extname(file).toLowerCase())
)
-
+
for (const testFile of supportedFiles) {
const sourcePath = path.join(testFilesDir, testFile)
const fileBuffer = fs.readFileSync(sourcePath)
@@ -1168,21 +1208,48 @@ app.post('/api/folders/default', async (req, res) => {
const ext = path.extname(testFile)
const newFileName = `${fileHash}${ext}`
const destPath = path.join(folderPath, newFileName)
-
+
// Copier le fichier
fs.copyFileSync(sourcePath, destPath)
-
+
// Traiter le fichier et sauvegarder le résultat
try {
- const result = await processDocument(fileBuffer, newFileName, testFile)
- saveJsonCacheInFolder(folderHash, fileHash, result)
- console.log(`[FOLDER] Fichier de test traité: ${testFile} -> ${fileHash}`)
+ console.log(`[FOLDER] Traitement de ${testFile}...`)
+
+ // Simuler un objet req.file pour la logique existante
+ const mockFile = {
+ path: destPath,
+ originalname: testFile,
+ mimetype: getMimeType(ext)
+ }
+
+ // Extraction de texte selon le type de fichier
+ let ocrResult = null
+ if (ext.toLowerCase() === '.pdf') {
+ ocrResult = await extractTextFromPdf(destPath)
+ } else if (['.jpg', '.jpeg', '.png', '.tiff'].includes(ext.toLowerCase())) {
+ ocrResult = await extractTextFromImage(destPath)
+ }
+
+ if (ocrResult && ocrResult.text) {
+ // Extraction des entités
+ const entities = extractEntitiesFromText(ocrResult.text)
+
+ // Génération du résultat au format standard
+ const result = generateStandardJSON(mockFile, ocrResult, entities, 0)
+
+ // Sauvegarde dans le cache du dossier
+ saveJsonCacheInFolder(folderHash, fileHash, result)
+ console.log(`[FOLDER] Fichier de test traité: ${testFile} -> ${fileHash}`)
+ } else {
+ console.warn(`[FOLDER] Aucun texte extrait de ${testFile}`)
+ }
} catch (error) {
console.warn(`[FOLDER] Erreur lors du traitement de ${testFile}:`, error.message)
}
}
}
-
+
res.json({
success: true,
folderHash,
@@ -1211,6 +1278,7 @@ app.listen(PORT, () => {
console.log(`📡 API disponible sur: http://localhost:${PORT}/api`)
console.log(`🏥 Health check: http://localhost:${PORT}/api/health`)
console.log(`📁 Test files: http://localhost:${PORT}/api/test-files`)
+ console.log(`📂 Répertoire de travail: ${process.cwd()}`)
})
module.exports = app
diff --git a/src/views/ExtractionView.tsx b/src/views/ExtractionView.tsx
index 7a435e6..2a327b9 100644
--- a/src/views/ExtractionView.tsx
+++ b/src/views/ExtractionView.tsx
@@ -38,7 +38,7 @@ import { Layout } from '../components/Layout'
export default function ExtractionView() {
const dispatch = useAppDispatch()
const { folderResults, currentResultIndex } = useAppSelector((state) => state.document)
-
+
const [currentIndex, setCurrentIndex] = useState(currentResultIndex)
// Utiliser les résultats du dossier pour la navigation
@@ -94,23 +94,23 @@ export default function ExtractionView() {
Résultats d'extraction
-
+
{/* Navigation */}
-
-
+
Document {currentIndex + 1} sur {folderResults.length}
-
-
@@ -141,18 +141,18 @@ export default function ExtractionView() {
{extraction.document.fileName}
-
-
-
+
}
diff --git a/test-folders.js b/test-folders.js
new file mode 100644
index 0000000..77f5e7b
--- /dev/null
+++ b/test-folders.js
@@ -0,0 +1,59 @@
+const fs = require('fs');
+const path = require('path');
+const crypto = require('crypto');
+
+// Fonction pour générer un hash de dossier
+function generateFolderHash() {
+ return crypto.randomBytes(16).toString('hex');
+}
+
+// Fonction pour créer la structure de dossiers
+function createFolderStructure(folderHash) {
+ console.log(`[FOLDER] Création de la structure pour le hash: ${folderHash}`);
+ console.log(`[FOLDER] Répertoire de travail: ${process.cwd()}`);
+
+ // Créer les dossiers racines s'ils n'existent pas
+ const uploadsDir = 'uploads';
+ const cacheDir = 'cache';
+
+ console.log(`[FOLDER] Vérification de l'existence de ${uploadsDir}: ${fs.existsSync(uploadsDir)}`);
+ console.log(`[FOLDER] Vérification de l'existence de ${cacheDir}: ${fs.existsSync(cacheDir)}`);
+
+ if (!fs.existsSync(uploadsDir)) {
+ fs.mkdirSync(uploadsDir, { recursive: true });
+ console.log(`[FOLDER] Dossier racine créé: ${uploadsDir}`);
+ }
+ if (!fs.existsSync(cacheDir)) {
+ fs.mkdirSync(cacheDir, { recursive: true });
+ console.log(`[FOLDER] Dossier racine créé: ${cacheDir}`);
+ }
+
+ const folderPath = path.join(uploadsDir, folderHash);
+ const cachePath = path.join(cacheDir, folderHash);
+
+ console.log(`[FOLDER] Chemin du dossier uploads: ${folderPath}`);
+ console.log(`[FOLDER] Chemin du dossier cache: ${cachePath}`);
+
+ if (!fs.existsSync(folderPath)) {
+ fs.mkdirSync(folderPath, { recursive: true });
+ console.log(`[FOLDER] Dossier uploads créé: ${folderPath}`);
+ }
+ if (!fs.existsSync(cachePath)) {
+ fs.mkdirSync(cachePath, { recursive: true });
+ console.log(`[FOLDER] Dossier cache créé: ${cachePath}`);
+ }
+
+ return { folderPath, cachePath };
+}
+
+// Test
+console.log('=== Test de création de dossier ===');
+const folderHash = generateFolderHash();
+console.log(`Hash généré: ${folderHash}`);
+
+const result = createFolderStructure(folderHash);
+console.log('Résultat:', result);
+
+console.log('\n=== Vérification des dossiers créés ===');
+console.log('Dossiers uploads:', fs.readdirSync('uploads'));
+console.log('Dossiers cache:', fs.readdirSync('cache'));