JSP: carga de archivos

En este capítulo, analizaremos la carga de archivos en JSP. Se puede usar una JSP con una etiqueta de formulario HTML para permitir a los usuarios cargar archivos al servidor. Un archivo cargado puede ser un archivo de texto o un archivo binario o de imagen o simplemente cualquier documento.

Crear un formulario de carga de archivos

Ahora entendamos cómo crear un formulario de carga de archivos. El siguiente código HTML crea un formulario de carga. Los siguientes son los puntos importantes que se deben anotar:

  • La forma method el atributo debe establecerse en POST El método y el método GET no se pueden utilizar.

  • La forma enctype el atributo debe establecerse en multipart/form-data.

  • La forma actionEl atributo debe establecerse en un archivo JSP que manejaría la carga de archivos en el servidor backend. El siguiente ejemplo está usandouploadFile.jsp archivo de programa para cargar el archivo.

  • Para cargar un solo archivo, debe usar un solo <input .../> etiqueta con atributo type = "file". Para permitir la carga de varios archivos, incluya más de una etiqueta de entrada con diferentes valores para el atributo de nombre. El navegador asocia un botón Examinar con cada uno de ellos.

<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>

Esto mostrará el siguiente resultado. Ahora puede seleccionar un archivo de la PC local y cuando el usuario hace clic en "Cargar archivo", el formulario se envía junto con el archivo seleccionado.

File Upload

Select a file to upload −



NOTE - El formulario anterior es solo un formulario ficticio y no funcionaría, debe probar el código anterior en su máquina para que funcione.

Escritura de secuencia de comandos JSP de backend

Definamos ahora una ubicación donde se almacenarán los archivos cargados. Puede codificar esto en su programa o este nombre de directorio también se puede agregar usando una configuración externa como uncontext-param elemento en web.xml de la siguiente manera:

<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>

A continuación se muestra el código fuente de UploadFile.jsp. Esto puede manejar la carga de varios archivos a la vez. Consideremos ahora lo siguiente antes de continuar con la carga de archivos.

  • El siguiente ejemplo depende de FileUpload; asegúrese de tener la última versión decommons-fileupload.x.x.jararchivo en su classpath. Puedes descargarlo desdehttps://commons.apache.org/fileupload/.

  • FileUpload depende de Commons IO; asegúrese de tener la última versión decommons-io-x.x.jararchivo en su classpath. Puedes descargarlo desdehttps://commons.apache.org/io/.

  • Mientras prueba el siguiente ejemplo, debe cargar un archivo que tenga un tamaño menor que maxFileSize; de ​​lo contrario, el archivo no se cargará.

  • Asegúrese de haber creado directorios c:\temp y c:\apache-tomcat5.5.29\webapps\data con mucha antelación.

<%@ 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>");
   }
%>

Ahora intente cargar archivos utilizando el formulario HTML que creó anteriormente. Cuando lo intentashttp://localhost:8080/UploadFile.htm, mostrará el siguiente resultado. Esto le ayudará a cargar cualquier archivo desde su máquina local.

File Upload

Select a file to upload −


Si su script JSP funciona bien, su archivo debe cargarse en c:\apache-tomcat5.5.29\webapps\data\ directorio.