template html & css

This commit is contained in:
ph
2025-11-26 22:34:43 +01:00
commit ea21779b05
20 changed files with 3208 additions and 0 deletions

97
explorer_md/server.py Normal file
View File

@@ -0,0 +1,97 @@
# 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/<filename>')
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/<filename>')
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)