Ce tutorial vient poursuivre l'article sur le framework Play! Il montre comment écrire un formulaire d'envoi de fichiers et comment restituer des fichiers aux clients.
Après avoir récupérer le framework sur le site officiel (http://www.playframework.org), créez votre projet avec la commande suivante. Les utilisateurs Windows devront utiliser Cygwin.
> play new Upload
Puis pour générer le projet Netbeans :
> play netbeansify Upload
Il est aussi possible de créer un projet Eclipse en remplaçant la commande par eclipsify.
Le formulaire est relativement simple. Le fichier est envoyer par la méthode POST et c'est notre contrôleur Application qui va le récupérer pour le stocker sur disque dur. Vous pourrez intégrer le code suivant dans la page index.html.
< form action="@{Application.upload}" enctype="multipart/form-data" method="post">< /form>
< form action="@{Application.upload}" enctype="multipart/form-data" method="post">
< input id="file" checked="0" disabled="0" name="file" readonly="0" type="file" />
< input checked="0" disabled="0" readonly="0" type="submit" value="Envoyer !" />
< form action="@{Application.upload}" enctype="multipart/form-data" method="post">< /form>
< /form>
On commence par ajouter la route : Puis on écrit le code de notre méthode. Le framework permet la récupération direct de fichiers. Ici, nous n'avons qu'a copier le fichier et, le cas échéant, créer le dossier data si celui ci n'existe pas. public static void upload(File file) { File to = Play.getFile("data/" + file.getName()); try { Files.copy(file, to); } catch(RuntimeException e) { Play.getFile("data/").mkdir(); Files.copy(file, to); } index(); }
L'ajout de fichier est opérationnel, nous allons maintenant afficher ces fichiers dans un tableau. Nous modifions la méthode index() pour restituer la liste de fichier au sein de la page :
public static void index() {
try {
List files = Arrays.asList(Play.getFile("data").listFiles());
render(files);
} catch(NullPointerException e) {
render();
}
}
Ensuite, nous intégrons le listing des fichiers à la vue. Nous afficherons quelques informations complémentaires sur les fichiers :
Liste des fichiers
#{if files == null}
Aucun fichier
#{/if}
#{if files != null}
#{/if}
Nous allons ajouter la route qui permet la récupération des fichiers. Celle ci se compose simplement de la racine “/content” et de son nom. GET /content/{name} Application.fileContent Enfin, une première méthode de rendu simple qui permet le téléchargement du fichier : public static void fileContent(String name) { File file = Play.getFile("data/" + name); renderBinary(file); } Une approche plus avancée permet de charger le fichier en tant que page. Cette méthode permet la modification des entêtes HTTP : public static void fileContent(String name) { File file = Play.getFile("data/" + name); response.setHeader("content-disposition","inline"); response.contentType = MimetypesFileTypeMap.getDefaultFileTypeMap().getContentType(file); throw new RenderBinary(file, null, true); } Pour finir, mettez à jour le code de la vue en ajoutant par exemple un lien sur le nom du fichier qui permettra de récupérer celui ci :