Los ejemplos en este artículo comparten la carga de archivo y descargan el código de implementación de Java para su referencia. El contenido específico es el siguiente
recepción:
1. Método de envío: POST
2. Hay elementos de formulario cargados de archivos en el formulario: <input type = "file" />
3. Especifique el tipo de formulario:
Tipo predeterminado: enctype = "aplicación/x-www-form-urlencoded"
Tipo de carga de archivo: Data multipart/formulario
FileUpload
Se usa comúnmente en el desarrollo de la función de carga de archivos, y Apache también proporciona componentes de carga de archivos.
Componente FileUpload:
1. Descargue el código fuente
2. Introducir archivos JAR en el proyecto
Commons-FileUpload-1.2.1.jar [PAQUETE DE CORE DE COMPONENT DE ARCHIVO COREMENTE]
Commons-IO-1.4.Jar [clases de herramientas relacionadas con bordados para el procesamiento de archivos]
usar:
public class UploadServlet extends HttpServlet { // upload directory, save the uploaded resources public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /************ File upload component: Handle file upload*******************/ try { // 1. File upload factory FileItemFactory fábrica = new DiskFileItemFactory (); // 2. Cree la clase de herramienta de carga de archivos ServletFileUpload upload = new ServLetFileUpload (fábrica); // 1. Establezca el tamaño máximo permitido para un solo archivo: 30m upload.setFilesizeMax (30*1024*1024); // 2. Establezca el tamaño total permitido para el formulario de carga de archivos: 80m upload.setsizeMax (80*1024*1024); // 3. Establezca la codificación del nombre del archivo de formulario de carga // equivalente a: request.setcharacterEncoding ("UTF-8"); subir.setheaderEncoding ("UTF-8"); // 3. Determine: si el formulario actual es un formulario de carga de archivo if (upload.ismultipartContent (request)) {// 4. Convierta los datos solicitados en objetos de FileItem y luego encapsule la lista <SchilItem> list = upload.parserequest (request); // Traversal: obtenga cada datos cargados para (FileItem item: list) {// sentencia: datos de texto normales if (item.isformfield ()) {// datos de texto normales cadena fieldName = item.getFieldName (); // Forma de nombre de elemento String content = element.getString (); // Nombre del elemento de formulario, datos correspondientes //item.getstring("UTF-8 "); Especificar el sistema de codificación.out.println (fieldName + "" + contenido); } // Cargar archivo (transmisión de archivo) ---> cargar en el directorio de carga más {// string de datos de texto normal fieldName = item.getFieldName (); // formulario name de nombre name = item.getName (); // Nombre de archivo String Content = item.getString (); // Nombre del elemento de formulario, Cadena de datos correspondiente tipo = item.getContentType (); // Tipo de archivo InputStream in = item.getInputStream (); // Cargar la transmisión del archivo/** 4. El nombre del archivo es el nombre* Para los diferentes usuarios readMe.txt archivos, ¡no quiera ser sobrescribido! * Procesamiento de fondo: ¡agregue una etiqueta única al usuario! */ // a. Genere aleatoriamente una cadena de etiqueta única id = uuid.randomuuid (). ToString (); // b. Nombre de empalme con nombre de archivo = id + "#" + nombre; // Obtener la ruta de carga de carga ruta ruta = getServletContext (). GetRealPath ("/upload"); // Crear el archivo Archivo de archivo de archivo = nuevo archivo (ruta, nombre); // Clase de herramientas, File Subload item.Write (archivo); item.delete (); // Eliminar el archivo temporal generado por el sistema System.out.println (); }}} else {system.out.println ("El formulario actual no es un formulario de carga de archivo, falló el procesamiento!"); }} catch (Exception e) {E.PrintStackTrace (); }} // Implementación manual del proceso de carga vacía privada (solicitud httpservletRequest) lanza IOException, UnsupportedEncodingException { /* request.getParameter (""); // get/publica request.getQueryString (); // Obtener los datos enviados por Get Solic.GetInputStream (); // Obtenga los datos enviados por post*//******************** obtener manualmente los datos de carga de carga ***************/// 1. Obtenga el flujo de datos de formulario InputStream in = request.getInputStream (); // 2. Convertir el stream inputStreamReader Initream = new InputStreamReader (in, "UTF-8"); // 3. BufferedReader Reader = new BufferedReader (InSteam); // String de datos de salida str = null; while ((str = lector.readline ())! = null) {system.out.println (str); } // String de datos de salida str = null; while ((str = lector.readline ())! = null) {system.out.println (str); } // cerrar lector.close (); Intileam.close (); cercar(); } public void dopost (httpservletRequest solicitud, respuesta httpservletResponse) lanza ServletException, ioexception {this.doget (solicitud, respuesta); }}Caso:
Index.jsp
<body> <a href = "$ {pageContext.request.contextpath} /upload.jsp"> Archivo de carga </a> <a href = "$ {pageContext.request.contextpath}/fileservlet? Method = downlist"> Descargar archivos </a> </body>Cargar.jsp
<Body> <Form name = "frm_test" action = "$ {pageContext.Request.contextPath}/fileservlet? Method = upload" método = "post" enctype = "multipart/form-data"> <%-<input type = "hidden" name = "método" value = "upload">-%Username: <input type = "text" name "name" "Hidden" name = "Method" value "Value" <input type = "file" name = "file_img"> <br/> <input type = "enviar" valor = "enviar"> </form> </body>Fileservlet.java
/** * Manejar la carga y descarga de archivos * @author jie.yuan * */public class FileServlet extiende httpservlet {public void doget (httpservletRequest solicitud, httpservletResponse respuesta) lanza servletException, ioexception {// los parámetros de solicitud: distinguir los tipos de operación diferentes. if ("cargar" .equals (método)) {// cargar carga (solicitud, respuesta); } else if ("downlist" .equals (método)) {// Ingrese la lista de descarga de la lista descendente (solicitud, respuesta); } else if ("down" .equals (método)) {// descargar hacia abajo (solicitud, respuesta); }} / ** * 1. Subiendo * / private void upload (httpservletRequest solicitud, httpservletResponse respuesta) lanza servletException, ioexception {try {// 1. Crear fábrica Factory Factory = new DiskFileImFactory (); // 2. CLOSE DE LA CORE de carga de archivos ServletFileUpload upload = new ServLetFileUpload (fábrica); // establecer parámetros de límite de tamaño cargando.setFileSizeMax (10*1024*1024); // Límite de tamaño de archivo único. SetSizEmax (50*1024*1024); // Total de archivo total Límite cargar.SetheaderEncoding ("UTF-8"); // Procesar la codificación de archivos chinos // Juez if (upload.ismultipartContent (request)) {// 3. Convertir datos de solicitudes en la lista de recopilación de la lista <StilEitem> list = upload.parsequest (request); // Traversal for (fileItem item: list) {// sentencia: datos de texto normal if (item.isformfield ()) {// obtenga el nombre de name = item.getFieldName (); // Obtener el valor Value de cadena = item.getString (); System.out.println (valor); } // Elemento de formulario de archivo else { / ************** iba de archivo ****************** // a. Obtenga el nombre del nombre del archivo name = item.getName (); // --- Manejar el problema de cargar el nombre del nombre del archivo Duplicado Nombre ---- // A1. Obtenga la cadena de marca única id = uuid.randomuuid (). ToString (); // a2. Nombre de archivo de empalme Nombre = id + "#" + nombre; // b. Obtenga el directorio de carga String basepath = getServletContext (). GetRealPath ("/upload"); // c. Cree el objeto de archivo para cargar archivo archivo = nuevo archivo (basepath, nombre); // d. Cargar item.write (archivo); item.delete (); // Eliminar el archivo temporal generado cuando el componente se está ejecutando}}}}} catch (Exception e) {E.PrintStackTrace (); }} / *** 2. Ingrese la lista de descargas* / private void downlist (httpservletRequest solicitud, respuesta httpservletResponse) arroja servletException, ioexception {// idea de implementación: primero obtenga los nombres de archivos de todos los archivos en el directorio de carga, y luego guarde; Salta a la lista Down.jsp para mostrar // 1. Inicializar la colección de mapas Mapa <nombre del archivo que contiene etiquetas únicas, nombre de archivo corto>; MAP <String, String> FileNames = new Hashmap <String, String> (); // 2. Obtenga el directorio de carga y los nombres de archivos de todos los archivos en string bathpath = getServletContext (). GetRealPath ("/upload"); // archivo de directorio archivo = nuevo archivo (bathpath); // En el directorio, todos los nombres de archivos String List [] = file.list (); // Traversal, encapsulate if (list! = Null && list.length> 0) {for (int i = 0; i <list.length; i ++) {// nombre completo de name FileName = list [i]; // String de nombre corto shortName = FileName.Substring (FileName.lastIndexOf ("#")+1); // Encapsular FileNames.put (nombre de archivo, shortname); }} // 3. Guardar para solicitar la solicitud de dominio.SetAttribute ("nombres de archivo", nombres de archivo); // 4. Reenviar request.getRequestDispatcher ("/downlist.jsp"). Forward (solicitud, respuesta); } / *** 3. Manejar descargar* / private void down (httpservletRequest solicitud, respuesta httpServletResponse) lanza ServletException, ioexception {// Obtenga el nombre de archivo descargado por el usuario (datos de appends después de la dirección de URL, get) fileName = request.getParameter ("filename"); FileName = new String (FileName.getBytes ("ISO8859-1"), "UTF-8"); // Obtener la ruta de carga de carga String BasePath = GetServletContext (). GetRealPath ("/upload"); // Obtenga un archivo de archivo inputStream in = new FileInputStream (nuevo archivo (BasePath, FileName)); // Si el nombre del archivo es chino, la codificación de URL debe realizarse filename = urlencoder.encode (nombre de archivo, "UTF-8"); // Establecer el encabezado de respuesta para descargar respuesta.setheader ("contenido-disposición", "adjunto; filename =" + filename); // Obtener respuesta Byte Stream OutputStream Out = Response.getOutputStream (); byte [] b = nuevo byte [1024]; int len = -1; while ((len = in.read (b))! = -1) {out.write (b, 0, len); } // cerrar.close (); cercar(); } public void dopost (httpservletRequest solicitud, respuesta httpservletResponse) lanza ServletException, ioexception {this.doget (solicitud, respuesta); }}Lo anterior se trata de este artículo, espero que sea útil para el aprendizaje de todos.