JSP puede cargar archivos al servidor a través de formularios HTML. El tipo de archivo puede ser un archivo de texto, un archivo binario, un archivo de imagen o cualquier otro documento.
A continuación utilizamos etiquetas HTML para crear el formulario de carga de archivos. Cabe señalar los siguientes puntos:
El atributo del método de formulario debe establecerse en el método POST y no se puede utilizar el método GET.
El atributo enctype del formulario debe establecerse en multipart/form-data.
El atributo de acción del formulario debe establecerse en la dirección del archivo jsp enviado en segundo plano para la carga del archivo. Por ejemplo, el archivo de programa uploadFile.jsp se utiliza para procesar archivos cargados.
Para cargar un elemento de archivo, debe usar la etiqueta <input .../> y establecer el atributo en type="file". Si necesita cargar varios archivos, puede establecer diferentes nombres en la etiqueta <input.../>.
El siguiente es un formulario para cargar archivos. Un ejemplo es el siguiente:
<html><head><title>Formulario de carga de archivos</title></head><body><h3>Carga de archivos:</h3>Seleccione un archivo para cargar: <br /><form action="UploadServlet" método="post" enctype="multipart/form-data"><input type="file" name="file" size="50" /><br /><input type="submit" value="Subir archivo " /></formulario></cuerpo></html>Acceda al archivo en su navegador local. La interfaz de visualización es la siguiente. Cuando haga clic en "Cargar archivo", aparecerá una ventana que le permitirá seleccionar el archivo a cargar:
Primero, primero definimos la ubicación donde se almacena el archivo en el servicio después de cargarlo. Puede escribir la ruta en su programa o podemos configurar el directorio donde se almacena el archivo configurando el elemento context-param en web.xml. archivo de configuración, como se muestra a continuación:
<aplicación web>....<context-param> <descripción>Dirección de carga de archivo</descripción> <param-name>carga de archivo</param-name> <valor-param> c:apache-tomcat- 5.5.29webappsdata </param-value> </context-param>....</web-app>
El siguiente archivo de script UploadFile.jsp puede manejar varios archivos cargados. Antes de usar este script, debemos prestar atención a los siguientes puntos:
El siguiente ejemplo se basa en FileUpload, por lo que debe introducir el archivo del paquete commons-fileupload.xxjar más reciente en su classpath. La dirección de descarga es: http://commons.apache.org/fileupload/.
FileUpload se basa en Commons IO, por lo que debe introducir la última versión commons-io-xxjar en su classpath. La dirección de descarga es: http://commons.apache.org/io/.
Al probar el siguiente ejemplo, debe cargar y confirmar que el tamaño del archivo cargado sea menor que el tamaño establecido por la variable maxFileSize ; de lo contrario, el archivo no se podrá cargar correctamente.
Asegúrese de haber creado los directorios c:temp y c:apache-tomcat-5.5.29webappsdata.
<%@ página import="java.io.*,java.util.*, javax.servlet.*" %><%@ página import="javax.servlet.http.*" %><%@ página importación= "org.apache.commons.fileupload.*" %><%@ página import="org.apache.commons.fileupload.disk.*" %><%@ página import="org.apache.commons.fileupload.servlet.*" %><%@ página import="org.apache.commons.io.output.*" %><% Archivo archivo; int maxFileSize = 5000 * 1024; int maxMemSize = 5000 * 1024 contexto ServletContext = pageContext.getServletContext(); context.getInitParameter("file-upload"); // Verificar el tipo de contenido cargado String contentType = request.getContentType(); if ((contentType.indexOf("multipart/form-data") >= 0)) { DiskFileItemFactory factory = new DiskFileItemFactory(); // Establece el tamaño máximo de los archivos almacenados en la memoria factory.setSizeThreshold(maxMemSize); Los datos almacenados localmente son mayores que maxMemSize. factory.setRepository(new File("c:\temp")); // Crea un nuevo controlador de carga de archivos ServletFileUpload upload = new ServletFileUpload(factory); upload.setSizeMax( maxFileSize ); try{ // Analizar el archivo obtenido Lista fileItems = upload.parseRequest(request); Procesar archivos cargados Iterador i = fileItems.iterator(); out.println("<html>"); out.println("<head>"); ); out.println("</head>"); out.println("<body>"); mientras (i.hasNext ()) { FileItem fi = (FileItem)i.next(); if ( !fi.isFormField () ) { // Obtener los parámetros del archivo cargado String fieldName = fi.getFieldName() String fileName = fi.getName(); .isInMemory (); long sizeInBytes = fi.getSize(); // Escribir en el archivo if( fileName.lastIndexOf("\") >= 0 ){ file = nuevo archivo (rutadelarchivo, nombredelarchivo.substring(nombredelarchivo.lastIndexOf("\"))) }else{ archivo = nuevo archivo(rutadelarchivo, nombredelarchivo.substring(nombredelarchivo.lastIndexOf("\")+1)); fi.write( archivo ); out.println("Nombre del archivo cargado: " + rutadelarchivo + nombredelarchivo + "<br>"); out.println("</body>"); out.println("</html>"); }catch(Excepción ex) { System.out.println(ex } }else{ out.println("<); html>"); out.println("<head>"); out.println("<title>Carga de servlet</title>"); out.println("</head>"); out.println("<body>"); out.println("<p>No se ha subido ningún archivo</p>"); out.println("</body>"); "); }%>
A continuación, accedamos a http://localhost:8080/UploadFile.htm a través del navegador. La interfaz se muestra a continuación y cargamos el archivo:
Si su secuencia de comandos JSP se ejecuta normalmente, el archivo se cargará en c:apache-tomcat-5.5.29webappsdata. Puede abrir la carpeta para ver si la carga se realizó correctamente.