template html & css
This commit is contained in:
97
explorer_md/server.py
Normal file
97
explorer_md/server.py
Normal 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)
|
||||
Reference in New Issue
Block a user