Este artículo comparte el código específico para Java para implementar la función de carga y descarga de archivos para su referencia. El contenido específico es el siguiente
El front-end utiliza la propiedad Enctype del formulario del formulario para modificar el método de entrega de datos al formulario binario "Stream". El servidor (servlet) obtiene la información de flujo a través de getInputStream (), y utiliza las operaciones básicas de la secuencia de E/S de Java para escribir el flujo a una temperatura del archivo creado temporalmente por el servidor. Luego, use nuevamente las operaciones básicas del archivo para leer e interceptar el contenido del archivo temporal, crear el archivo correspondiente en función de la información y escribir la información específica que lee. Al descargar, busque el archivo correspondiente en el servidor en función del nombre del archivo enviado y luego envíelo a la página de acuerdo con la transmisión de salida Outstream, y establezca el tipo de respuesta y el encabezado de respuesta del servlet.
El proceso de transmisión específico es el siguiente:
La parte de la información del flujo es:
El código específico es el siguiente:
Código frontal:
<html> <fead> <meta http-equiv = "content-type" content = "text/html; charset = utf-8"> <title> Insertar título aquí </title> <script src = "js/jQuery.js"> </script> </head> <body> <form Action = "FileUpservlet" Method = "Post" CICTPE = "Multiplicar/" <tr> <td> Seleccione el archivo de carga: </td> <td> <input id = "myFile" name = "myfile" type = "file" value = ""/> </td> <td> <input type = "enviar" valor = "cargar"> </td> </tr> <tr> <td> $ {info} </td> </tr> </table href = "FileloadownServlet? FileName = $ {FileName}"> $ {FileName} </a> </body> </html>Subir la parte del servlet (núcleo)
@WebServlet ("/FileUpServlet") clase pública FileUpServlet extiende httpservlet {private static final long serialVersionUid = 1l; / ** * @see httpservlet#httpservlet () */ public fileUpServlet () {super (); // TODO Auto Generado Constructor Stub}/ ** * @see httpservlet#doget (httpservletRequest solicitud, httpServletReSponse Respuesta) */ protegido void doget (httpservletRequest solicitud, httpServletResponse Response) ServletException, iOException {// aDO AUTO METOTO METOTOM dopost (solicitud, respuesta); } / ** * @see httpservlet#dopost (httpservletRequest solicitud, respuesta httpServletResponse) * / protegido void dopost (httpservletRequest solicitud, respuesta httpservletreSponse) lanza ServletException, ioexception {// TODO Autométodo de método automático request.setcharacterEncoding ("UTF-8"); InputStream filesource = request.getInputStream (); // Solicitar la información de la información de transmisión Tempname = "D:/Temp" ;/ TEMPFile representa el almacenamiento temporal de archivos TempFile = new File (Tempname); // Crear archivo temporal FileOutputStreamStream = nuevo FileOutPutPutPutream (tempfile Tempfile); // Salida de flujo de salida, especificando la salida se refiere a la salida a la salida de archivo. = nuevo byte [1024]; int n; while ((n = filesource.read (b))! = -1) // lea 1024 bytes de la transmisión de salida cada vez hasta que termine de leer {outputStream.write (b, 0, n); } outputStream.Close (); FileSource.close (); // Cierre la transmisión de entrada y salida/*Las siguientes son operaciones de archivo específicas, principalmente para analizar archivos TEMP generados temporalmente, ¡y la mayor parte del conocimiento es el contenido de la transmisión de entrada y salida de Java! */RandomAccessFile randomFile = new RandomAccessFile (tempfile, "r"); // stream aleatorio, especifique para leer archivos temporales, solo lea randomfile.readline (); // leer la primera línea, datos inválidos, sin cadena str = randomfile.read.readline (); // leer la segunda línea intentindex = str.lastIndexf ("=")+2; endIndex = str.lastIndexof ("/" "); // Especifique la ubicación de la cadena de datos requerida filename = str.substring (beginIndex, endIndex); // Intercept el nombre del archivo // reposicionar el puntero del archivo y obtener el contenido del archivo randomFile.seek (0); // Pointer de archivo comienza desde el inicio de arranque temprano = 0; int i = 1; while (n = RandomFile.ReadByte ())! = -1 && i <= 4) {if (n == '/n') {startext = randomFile.getFilePointer () RandomFile.getFilePointer (); getServletContext (). GetRealPath ("/")+"Images";/Establezca el directorio de guardado de archivo. Archivo (RealPath, FileName); RandomAcessFile.CLOSE (); "+nombre de archivo+" ¡cargado con éxito! "); request.setAttribute (" nombre de archivo ", nombre de archivo); request.getRequestDispatcher ("/Fildeop.jsp "). Avance (solicitud, respuesta);}}Sección de descarga
Solicitud de dopost voides protegido (httpservletRequest, httpservletResponse respuesta) arroja servletException, ioexception {// todo método generado automático stub string filename = request.getParameter ("filename"); String ruta = getServletContext (). GetRealPath ("/")+"Images/"; Archivo archivo = nuevo archivo (path+filename); // file if (file.exists ()) {Response.SetContentType ("Application/X-Msdownload"); // Establecer el tipo de respuesta, aquí está el tipo de descarga Respuesta.Setheader ("Content-Disposition", "Adjunto; FileName =/" "+FileName+"/""); // abrir inputStream inputStream = new FileInputStream (archivo); ServLetOutputStream OutputStream = Response.getOutputStream (); byte b [] = nuevo byte [1024]; int n; while ((n = inputStream.read (b))! = -1) {outputStream.Write (b, 0, n); } outputStream.Close (); inputStream.close (); } else {request.setAttribute ("resultado", "¡El archivo no existe! ¡Descargar fallido!"); request.getRequestDIsPatcher ("/Fildeop.jsp"). Forward (solicitud, respuesta); }}Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.