# app.py # pip install flask from flask import Flask, render_template, jsonify, send_from_directory import os app = Flask(__name__) # Le répertoire que nous voulons explorer (relatif à app.py) FILE_DIR = 'files' # --- Configuration des Routes --- @app.route('/') def index(): """Route principale qui sert la page HTML.""" return render_template('index.html') @app.route('/images/') def get_image(filename): """Sert une image depuis un dossier.""" return send_from_directory('images', filename) @app.route('/api/list_files') def list_files(): """Endpoint API pour lister les fichiers du répertoire.""" try: # Assurez-vous que le répertoire existe if not os.path.isdir(FILE_DIR): return jsonify({'error': f"Le répertoire '{FILE_DIR}' n'existe pas."}), 500 # Liste tous les éléments dans le répertoire all_items = os.listdir(FILE_DIR) # Filtre pour ne garder que les fichiers (et non les dossiers) file_list = [item for item in all_items if os.path.isfile(os.path.join(FILE_DIR, item))] return jsonify(file_list) except Exception as e: app.logger.error(f"Erreur lors de la récupération de la liste des fichiers : {e}") return jsonify({'error': 'Erreur interne du serveur.'}), 500 @app.route('/api/get_content/') def get_content(filename): """Endpoint API pour obtenir le contenu d'un fichier.""" file_path = os.path.join(FILE_DIR, filename) # Sécurité: Vérifiez que le chemin est bien dans le répertoire autorisé # Ceci empêche les attaques de 'Directory Traversal' if not os.path.abspath(file_path).startswith(os.path.abspath(FILE_DIR)): return jsonify({'error': 'Accès non autorisé.'}), 403 try: # Cas des fichiers textes lisibles if filename.endswith(('.txt', '.ini', '.json', '.html', '.css', '.js')): with open(file_path, 'r', encoding='utf-8') as f: content = f.read() return jsonify({'content': content, 'type': 'text'}) elif filename.endswith(('.md')): with open(file_path, 'r', encoding='utf-8') as f: content = f.read() return jsonify({'content': content, 'type': 'text'}) # Cas des images ou autres binaires (on simule le contenu) elif filename.endswith(('.jpg', '.png', '.pdf')): return jsonify({ 'content': f"Fichier binaire ou non textuel. Le contenu de {filename} ne peut pas être affiché directement.", 'type': 'binary' }) # Pour tout autre type de fichier non géré else: return jsonify({'content': f"Type de fichier non supporté pour l'affichage : {filename}", 'type': 'unsupported'}) except FileNotFoundError: return jsonify({'error': 'Fichier non trouvé.'}), 404 except Exception as e: app.logger.error(f"Erreur lors de la lecture du fichier {filename} : {e}") return jsonify({'error': 'Erreur interne du serveur lors de la lecture.'}), 500 if __name__ == '__main__': # Créez le répertoire des fichiers s'il n'existe pas if not os.path.exists(FILE_DIR): os.makedirs(FILE_DIR) # Créez quelques fichiers de test with open(os.path.join(FILE_DIR, 'Fichier 1.txt'), 'w') as f: f.write("Contenu du premier fichier texte.") with open(os.path.join(FILE_DIR, 'Config.ini'), 'w') as f: f.write("[Settings]\nVersion=1.0\nPath=/data") with open(os.path.join(FILE_DIR, 'Image.jpg'), 'w') as f: # Fichier binaire simulé f.write("Ceci n'est pas une image réelle.") # Lancez l'application Flask app.run(debug=True)