Cherrypy : uploader un fichier

L’idée

Cet exemple consiste à montrer comment uploader un fichier vers le serveur.

Dans mon cas,

  1. on choisit le fichier ;
  2. on appuie sur « valider ;
  3. les informations sur le fichier s’affiche en bas de cette page ;
  4. un lien permet de visualiser le fichier ;
  5. un autre lien permet de le télécharger.

En pratique, le programme commence par lire le fichier sélectionné. Ensuite, il le copie dans le serveur dans le dossier « static/upload ».

Le code

import cherrypy, os


mapageIndex="""
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Illustration d'un upload</title>
</head>
<body>
<h2>
Uploader un fichier
</h2>
<hr>
<form action="index" method="post" enctype="multipart/form-data">
<br>
<input type="file" name="myFile"><br>
<br>
<input type="submit" name=boutonChoisir>
</form>
<hr>
"""

mapageUpload="""

<body>
<h2>
Informations sur le fichier
</h2>
Taille: %s<br>
Nom: %s<br>
Mime-type: %s
<br>
<br>
<a href=%s target="_blank">Visualiser le fichier</a>
<br>
<a href=%s download>Télécharger le fichier</a>
"""

finpage="""
</body>
</html>
"""

class monSite():
	#----------------- index
	@cherrypy.expose
	def index(self,boutonChoisir=None,myFile=None):
		if boutonChoisir :
			content = myFile.file.read()
			nomFichier="./static/upload/" + myFile.filename
			file = open (nomFichier,"wb")
			file.write(content)
			file.close()
			return mapageIndex +mapageUpload % (len(content), myFile.filename, myFile.content_type,nomFichier,nomFichier) + finpage
		else :
			return mapageIndex + finpage


cherrypy.quickstart(monSite())