JSP - Téléchargement de fichiers

Dans ce chapitre, nous aborderons le téléchargement de fichiers dans JSP. Une JSP peut être utilisée avec une balise de formulaire HTML pour permettre aux utilisateurs de télécharger des fichiers sur le serveur. Un fichier téléchargé peut être un fichier texte ou un fichier binaire ou image ou n'importe quel document.

Création d'un formulaire de téléchargement de fichier

Voyons maintenant comment créer un formulaire de téléchargement de fichier. Le code HTML suivant crée un formulaire de téléchargement. Voici les points importants à noter -

  • La forme method l'attribut doit être défini sur POST La méthode et la méthode GET ne peuvent pas être utilisées.

  • La forme enctype l'attribut doit être défini sur multipart/form-data.

  • La forme actionL'attribut doit être défini sur un fichier JSP qui gérerait le téléchargement de fichiers sur le serveur principal. L'exemple suivant utiliseuploadFile.jsp fichier programme pour télécharger le fichier.

  • Pour télécharger un seul fichier, vous devez utiliser un seul <input .../> balise avec attribut type = "file". Pour autoriser le téléchargement de plusieurs fichiers, incluez plus d'une balise d'entrée avec des valeurs différentes pour l'attribut de nom. Le navigateur associe un bouton Parcourir à chacun d'eux.

<html>
   <head>
      <title>File Uploading Form</title>
   </head>
   
   <body>
      <h3>File Upload:</h3>
      Select a file to upload: <br />
      <form action = "UploadServlet" method = "post"
         enctype = "multipart/form-data">
         <input type = "file" name = "file" size = "50" />
         <br />
         <input type = "submit" value = "Upload File" />
      </form>
   </body>
   
</html>

Cela affichera le résultat suivant. Vous pouvez maintenant sélectionner un fichier à partir du PC local et lorsque l'utilisateur clique sur "Télécharger le fichier", le formulaire est soumis avec le fichier sélectionné -

File Upload

Select a file to upload −



NOTE - Le formulaire ci-dessus est juste un formulaire factice et ne fonctionnerait pas, vous devriez essayer le code ci-dessus sur votre machine pour le faire fonctionner.

Ecrire un script JSP backend

Définissons maintenant un emplacement où les fichiers téléchargés seront stockés. Vous pouvez le coder en dur dans votre programme ou ce nom de répertoire peut également être ajouté à l'aide d'une configuration externe telle qu'uncontext-param élément dans web.xml comme suit -

<web-app>
....
<context-param> 
   <description>Location to store uploaded file</description> 
   <param-name>file-upload</param-name> 
   <param-value>
      c:\apache-tomcat-5.5.29\webapps\data\
   </param-value> 
</context-param>
....
</web-app>

Voici le code source de UploadFile.jsp. Cela peut gérer le téléchargement de plusieurs fichiers à la fois. Considérons maintenant ce qui suit avant de procéder au téléchargement des fichiers.

  • L'exemple suivant dépend de FileUpload; assurez-vous d'avoir la dernière version decommons-fileupload.x.x.jarfichier dans votre chemin de classe. Vous pouvez le télécharger surhttps://commons.apache.org/fileupload/.

  • FileUpload dépend de Commons IO; assurez-vous d'avoir la dernière version decommons-io-x.x.jarfichier dans votre chemin de classe. Vous pouvez le télécharger surhttps://commons.apache.org/io/.

  • Lors du test de l'exemple suivant, vous devez télécharger un fichier dont la taille est inférieure à maxFileSize, sinon le fichier ne sera pas téléchargé.

  • Assurez-vous d'avoir créé des répertoires c:\temp et c:\apache-tomcat5.5.29\webapps\data bien à l'avance.

<%@ page import = "java.io.*,java.util.*, javax.servlet.*" %>
<%@ page import = "javax.servlet.http.*" %>
<%@ page import = "org.apache.commons.fileupload.*" %>
<%@ page import = "org.apache.commons.fileupload.disk.*" %>
<%@ page import = "org.apache.commons.fileupload.servlet.*" %>
<%@ page import = "org.apache.commons.io.output.*" %>

<%
   File file ;
   int maxFileSize = 5000 * 1024;
   int maxMemSize = 5000 * 1024;
   ServletContext context = pageContext.getServletContext();
   String filePath = context.getInitParameter("file-upload");

   // Verify the content type
   String contentType = request.getContentType();
   
   if ((contentType.indexOf("multipart/form-data") >= 0)) {
      DiskFileItemFactory factory = new DiskFileItemFactory();
      // maximum size that will be stored in memory
      factory.setSizeThreshold(maxMemSize);
      
      // Location to save data that is larger than maxMemSize.
      factory.setRepository(new File("c:\\temp"));

      // Create a new file upload handler
      ServletFileUpload upload = new ServletFileUpload(factory);
      
      // maximum file size to be uploaded.
      upload.setSizeMax( maxFileSize );
      
      try { 
         // Parse the request to get file items.
         List fileItems = upload.parseRequest(request);

         // Process the uploaded file items
         Iterator i = fileItems.iterator();

         out.println("<html>");
         out.println("<head>");
         out.println("<title>JSP File upload</title>");  
         out.println("</head>");
         out.println("<body>");
         
         while ( i.hasNext () ) {
            FileItem fi = (FileItem)i.next();
            if ( !fi.isFormField () ) {
               // Get the uploaded file parameters
               String fieldName = fi.getFieldName();
               String fileName = fi.getName();
               boolean isInMemory = fi.isInMemory();
               long sizeInBytes = fi.getSize();
            
               // Write the file
               if( fileName.lastIndexOf("\\") >= 0 ) {
                  file = new File( filePath + 
                  fileName.substring( fileName.lastIndexOf("\\"))) ;
               } else {
                  file = new File( filePath + 
                  fileName.substring(fileName.lastIndexOf("\\")+1)) ;
               }
               fi.write( file ) ;
               out.println("Uploaded Filename: " + filePath + 
               fileName + "<br>");
            }
         }
         out.println("</body>");
         out.println("</html>");
      } catch(Exception ex) {
         System.out.println(ex);
      }
   } else {
      out.println("<html>");
      out.println("<head>");
      out.println("<title>Servlet upload</title>");  
      out.println("</head>");
      out.println("<body>");
      out.println("<p>No file uploaded</p>"); 
      out.println("</body>");
      out.println("</html>");
   }
%>

Essayez maintenant de télécharger des fichiers à l'aide du formulaire HTML que vous avez créé ci-dessus. Quand tu essaieshttp://localhost:8080/UploadFile.htm, il affichera le résultat suivant. Cela vous aidera à télécharger n'importe quel fichier depuis votre machine locale.

File Upload

Select a file to upload −


Si votre script JSP fonctionne correctement, votre fichier doit être téléchargé dans c:\apache-tomcat5.5.29\webapps\data\ annuaire.