Servir un fichier¶
Objectif : relire un fichier stocké via serve_media_file, sans jamais
laisser sortir de la racine d'upload.
Ce que vous allez apprendre : serve_media_file prend un chemin relatif,
vérifie qu'il reste dans la racine d'upload (anti-traversal), et renvoie le fichier
— ou 404 s'il est absent ou le chemin invalide.
Troisième palier du niveau débutant de la progression files.
Module opt-in
Ce starter suppose forge-mvc-files installé (palier « Installation »).
Ce que ce starter montre¶
- une page d'explication + un champ pour un chemin de fichier ;
serve_media_file(path)qui renvoie le fichier (ou404) ;- la protection anti-traversal intégrée (un
../est refusé).
Classes Forge utilisées¶
| Classe / fonction | Rôle dans ce starter | Référence |
|---|---|---|
forge_mvc_files.serve_media_file |
Servir un fichier par son chemin relatif, anti-traversal + 404. | Médias |
request.param(...) |
Lire le chemin demandé. | Request |
Tester¶
Stockez un fichier au palier précédent, notez son chemin, puis ouvrez
https://localhost:8000/file-serve et demandez-le. Un chemin ../secret est
refusé (404).
Le contrôleur¶
# mvc/controllers/file_serve_controller.py
from forge_mvc_files import serve_media_file
class FileServeController(BaseController):
@staticmethod
def download(request: Request) -> Response:
path = request.param("path") or ""
if not path:
return Response.text("Paramètre « path » requis.", status=400)
# serve_media_file gère lui-même l'anti-traversal et le 404.
return serve_media_file(path)
Comprendre ce code¶
- On passe un chemin relatif (celui du
SavedUpload.path), jamais un chemin absolu :serve_media_filerésout par rapport à la racine d'upload. - L'anti-traversal est dans la primitive, pas dans le contrôleur : impossible d'oublier la garde.
- Fichier absent ou chemin piégé →
404, jamais une fuite hors zone.
À retenir¶
- Servir un fichier = donner son chemin relatif à
serve_media_file. - La protection anti-traversal est portée par la primitive.
- Stocker (
save_upload) et servir (serve_media_file) sont les deux faces du cycle de vie d'un fichier.
Après ce starter¶
Vous savez stocker et servir. La suite : comprendre pourquoi un fichier est parfois refusé.