6.4. Téléchargement de fichiers

Pour télécharger un fichier du client vers le serveur, la balise INPUT doit avoir le type "file". Le formulaire HTML a l'allure suivante :

<FORM ENCTYPE="multipart/form-data" ACTION="telecharge_fichier.py" METHOD=POST>
Fichier à télécharger : <INPUT NAME="monfichier" TYPE="file">
<INPUT TYPE="submit" VALUE="Envoyer">
</FORM>

Le script qui doit gérer le téléchargement de fichier utilisera la variable REQUEST['monfichier'] ou _monfichier, qui est une instance de la classe FieldStorage dans le module cgi de la distribution standard Python. Cet objet a entre autres attributs :

  • filename : le nom du fichier
  • file : un objet similaire à un fichier depuis lequel on peut lire le contenu du fichier téléchargé

Par exemple si vous voulez sauvegarder le fichier dans le système de fichier du serveur, avec le même nom que le fichier original :

import os
f = _monfichier.file # objet similaire à un fichier
nom_dest = os.path.basename(_monfichier.filename)
out = open(nom_dest,'wb')
# copie du fichier
import shutil
shutil.copyfileobj(f,out)
out.close()