15 Fév2016
Upload File avec JSP
Objectifs :
- Chargement d'un fichier.
- Création d'une servlet.
- Création d'un dossier.
- Redirection avec RequestDispatcher.
Énoncé :
On souhaite créer une application web permettant de charger un fichier (image, pdf ...) dans un dossier de notre projet déployé dans un serveur web. Pour ce faire, on demande de créer la page web suivante :
Au clic sur le bouton Upload, le fichier sélectionné sera transféré vers le dossier "/WEB-INF/file/". Ainsi, l'utilisateur sera rédigé vers une page "result.jsp" en affichant le message "File Uploaded Successfully".
Note
La classe File
Une classe qui permet de manipuler des fichiers et des répertoires sans toutefois accéder aux données dans les fichiers.
File myFile = new File("file"); //Création de dossier if(!myFile.exists()) myFile.mkdirs(); // Si on se trouve dans le répertoire courant String relative = myFile.getPath(); // retourne "file.txt" System.out.println(relative); String absolute = myFile.getAbsolutePath(); System.out.println(absolute); // C:\Users\leblond\Documents\NetBeansProjects\Examen\file boolean there = myFile.exists(); // vrai ou faux si le fichier existe ou non System.out.println(there); boolean checkDir = myFile.isDirectory(); // si le fichier est un répertoire System.out.println(checkDir); long myLength = myFile.length(); // taille du fichier. System.out.println(myLength); // retourne les différents fichiers dans un répertoire String[] allfiles = myFile.list(); for(String st : allfiles) System.out.println(st);
Structure du projet :
Le formulaire "index.html"
<html> <head> <title>Exemple : Upload File</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <form action="UploadController" method="post" enctype="multipart/form-data"> File : <input type="file" name="image" id="imageFile" /> <input type="submit" value="Upload" /> </form> </body> </html>
La servlet "UploadController"
package ma.projet.controller; import java.io.File; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; /** * * @author lachgar */ @WebServlet(name = "UploadController", urlPatterns = {"/UploadController"}) public class UploadController extends HttpServlet { protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { if (ServletFileUpload.isMultipartContent(request)) { File path = null; try { List<FileItem> multiparts = new ServletFileUpload( new DiskFileItemFactory()).parseRequest(request); for (FileItem item : multiparts) { if (!item.isFormField()) { String name = new File(item.getName()).getName(); path = new File(this.getServletContext().getRealPath("/")+"/WEB-INF/file/"); if (!path.exists()) { boolean status = path.mkdirs(); } item.write(new File( path.getPath()+ File.separator + name)); } } //File uploaded successfully request.setAttribute("msg", "File Uploaded Successfully"); } catch (Exception ex) { request.setAttribute("msg", "File Upload Failed due to " + ex); } } else { request.setAttribute("msg", "Sorry this Servlet only handles file upload request"); } request.getRequestDispatcher("/result.jsp").forward(request, response); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } @Override public String getServletInfo() { return "Short description"; }// </editor-fold> }
La page de résultat "result.jsp"
<%-- Document : result.jsp Created on : 15 févr. 2016, 15:48:16 Author : lachgar --%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Exemple : Upload d'un file</title> </head> <body> <div id="result"> <h3>${requestScope["msg"]}</h3> </div> </body> </html>