La carga de archivos web usa POST. A diferencia de los formularios de envío de publicaciones, la carga de archivos requiere configurar el atributo CIGTPE de formulario en multipart/formularios de forma. Dado que los archivos cargados serán relativamente grandes, este parámetro debe establecerse para especificar que el navegador usa la carga binaria. Si no se establece, la propiedad EnctType es predeterminada a Application/X-WWW-Form-URLEncoded. El uso del navegador usará ASCII para enviar datos al servidor, lo que resulta en la falta de envío de enviar el archivo.
Para cargar un archivo, use el dominio del archivo (<input type = 'file'/> y establezca el enchype del formulario en multipart/formy-data.
La página de carga del cliente se muestra en la figura:
El código es el siguiente:
cargar.html
<<s Doctype html public "-// w3c // dtd html 4.01 transitional // en"> <html> <cead> <title> cargar archivo </title> <meta http-equiv = "Keywords" Content = "Keyword1, Keyword2, Keyal de clave http-Equiv = "Content-type" Content = "Text/Html; CharSet = Utf-8"> <Link Rel = "StyleSheet" type = "Text/CSS" Align = "Center"> <br/> <FieldSet> <Legend> Cargar archivo </legend> <br/> <div class = 'line'> <div Align = 'Left'> cargar archivo 1 </div> <div align = 'izquierda'> <input type = "file" name = "archivo1"> </div> </div> <divs class = 'line'> <div up up '> up up. align = 'Left'> cargar archivo 2 </div> <div align = 'izquierda'> align = 'izquierda'> <input type = "file" name = "file2"> </div> </div> <div class = 'line'> <div align = 'izquierda'> El archivo de carga descripción 1 </div> <divs align = 'izquierda'> <input type = "name =" Descripción1 "</div div <Div <Div <Div 4/Div Class <Div align = 'izquierda'> El archivo de carga descripción 2 </div> <div align = 'izquierda'> <input type = "text" name = "description2"> </div> </div> <divs class = 'line'> <div align = 'left'> upload archivo descripción 2 </phiv align = 'izquierda'> </div> <Div align = 'Left'> <BR/> <py type de entrada = "Subting" </div> </div> </fieldset> </div> </form> </body> </html>
El código ejecutado por el cliente es muy simple y el servidor es más complicado. Para obtener el contenido, la solicitud presentada por el navegador debe analizarse de acuerdo con el formato especificado por el protocolo HTTP.
Es más problemático analizar las corrientes binarias. Muchas bibliotecas de clases ya han completado este trabajo. Por ejemplo, Smartupload y Apache Commons FileUpload.smartupload es una biblioteca de clase comercial. Los datos se almacenan en la memoria durante el análisis del proceso de solicitud, por lo que es más rápido, pero el desbordamiento de la memoria ocurre al cargar archivos más grandes. Apache Commons FileUpload es una biblioteca de clase de código abierto y gratuita. Algunos marcos, como Struts, integran la Biblioteca de clases de APACHE COMME FileUpload para implementar cargas de archivos.
Como se muestra en la figura:
El código es el siguiente:
paquete com.helloweenvsfei.servlet; import java.io.file; import java.io.fileOutputStream; import java.io.ioException; import java.io.inputstream; import java.io.outputstream; import java.io.io.preintwrither; import java.net.urlencoder; import java.util.List; importil javax.servlet.servletException; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpServletResponse; import org.apache.monmons.fileplroplaadfilepluplepl. org.apache.commons.fileupload.fileitem; import org.apache.commons.fileupload.fileuploadException; public class uploadServlet extiende httpservlet {private static final long serialversionuid = 7523024737218332088l; Public void doget (HTTPServletRequest Solicitud, respuesta httpservletResponse) lanza ServletException, ioexception {Response.SetcharacterEncoding ("UTF-8"); Response.getWriter (). println ("por favor cargue el archivo en la publicación"); } @Suppleswarnings ("sin verificar") public void dopost (httpservletRequest solicitud, respuesta httpservletreSponse) lanza ServletException, ioexception {file file1 = null, file2 = null; String Descripción1 = null, description2 = null; respuesta.setcharacterEncoding ("UTF-8"); respuesta.setContentType ("Text/html"); PrintWriter out = Response.getWriter (); out.println ("<! DocType html public/"-// w3c // dtd html 4.01 transitional // en/">"); out.println ("<html>"); out.println ("<Ethead> <title> un servlet </title> </head>"); out.println ("<link rel = 'stylesheet' type = 'text/css' href = '../css/style.css'>"); out.println ("<body>"); out.println ("<Div align = Center> <br/>"); out.println ("<Fieldset style = 'Width: 90%'> <legend> FILE DE CARGAR </Legend> <br/>"); out.println ("<div class = 'line'>"); out.println ("<Div align = 'left' class = 'LeftDiv'> Log de carga: </div>"); out.println ("<div align = 'izquierda' class = 'rightDiv'>"); // Use el objeto DiskFileUpload para analizar diskfileUpload diskfileUpload = new DiskFileUpload (); Pruebe {// Coloque el resultado analizado en la lista de listas <StilEitem> list = diskfileUpload.parserequest (solicitud); out.println ("Trace a través de todos los archivadores ... <br/>"); // traza a través de la lista todos los fileitems en el fileitem fileItem: list) {if (fileitem.isformfield ()) {// Si es un campo de texto if ("description1" .equals (fileitem.getFieldName ())) {// si el nombre de fileitem es description1 out.println ("viajar a descripción a la descripción ... <BR/>"); description1 = new String (fileitem.getString (). getBytes (), "UTF-8"); } if ("Descripción2" .equals (fileitem.getFieldName ())) {// Si el nombre de fileitem es description2 out.println ("Viaje a la descripción2 ... <br/>"); description2 = new String (fileItem.getString (). GetBytes (), "UTF-8"); }} else {// de lo contrario, para el campo Archivo if ("file1" .equals (fileitem.getFieldName ())) {// objeto de archivo creado por la ruta del archivo del cliente archivo remotionFile = new File (new String (fileitem.getName (). getBytes (), "UTF-8"); out.println ("viajar a file1 ... <br/>"); out.println ("Ubicación del archivo del cliente:" + remotos :getabsolutePath () + "<br/>"); // Archivo del lado del servidor, coloque en el archivo de carpeta de carga1 = nuevo archivo (this.getServletContext (). GetRealPath ("Adjunto"), remotafile.getName ()); file1.getParentFile (). MkDirs (); file1.createNewFile (); // Escriba un archivo y escriba el contenido del archivo de FileItem en el archivo InputStream INS = FileItem.getInputStream (); OutputStream oUs = new FileOutputStream (file1); intente {byte [] buffer = new Byte [1024]; int len = 0; while ((len = ins.read (buffer))> -1) ouswrite (buffer, 0, len); out.println ("Guardar archivo" + file1.getabsolutePath () + "<br/>"); } finalmente {oussclose (); ins.close (); }} if ("file2" .equals (fileItem.getFieldName ())) {// Object de archivo creado por el archivo de archivo ROTH FILE = new File (new String (fileItem.getName (). GetBytes (), "UTF-8")); out.println ("viajar a file2 ... <br/>"); out.println ("Ubicación del archivo del cliente:" + remotos :getabsolutePath () + "<br/>"); // archivo del lado del servidor, coloque el archivo de carpeta de carga2 = nuevo archivo (this.getServletContext (). GetRealPath ("Adjunto"), remotofile.getName ()); file2.getParentFile (). MkDirs (); file2.createenewfile (); // Escriba un archivo y escriba el contenido del archivo de FileItem en el archivo InputStream INS = FileItem.getInputStream (); OutputStream ous = new FileOutputStream (File2); intente {byte [] buffer = new Byte [1024]; int len = 0; while ((len = ins.read (buffer))> -1) ouswrite (buffer, 0, len); out.println ("Guardar archivo" + file2.getabsolutePath () + "<br/>"); } finalmente {oussclose (); ins.close (); }}}} out.println ("Se completa el análisis de solicitud"); } Catch (FileUploadException e) {// TODO Auto Generado Bloque E.PrintStackTrace (); } out.println ("</div>"); out.println ("<Div align = 'left' class = 'LeftDiv'> file1: </div>"); out.println ("<div align = 'izquierda' class = 'rightDiv'>"); out.println ("<a href = '" + request.getContextPath () + "/adjunta/" + file1.getName () + "' target = _blank>" + file1.getName () + "</a>"); out.println ("</div>"); out.println ("</div>"); } if (file2! = null) {out.println ("<div class = 'line'>"); out.println ("<div align = 'left' class = 'LeftDiv'> file2: </div>"); out.println ("<div align = 'izquierda' class = 'rightDiv'>"); out.println ("<a href = '" + request.getContextPath () + "/adjunto/" + urlencoder.enCode (file2.getName (), "utf-8") + "' target = _blank>" + file2.getName () + "</a>"); out.println ("</div>"); out.println ("</div>"); } out.println ("<div class = 'line'>"); out.println ("<Div align = 'left' class = 'LeftDiv'> Descripción1: </div>"); out.println ("<div align = 'izquierda' class = 'rightDiv'>"); out.println ("<div align = 'izquierda' class = 'rightDiv'>"); out.println ("<Div align = 'left' class = 'LeftDiv'> Descripción2: </div>"); out.println ("<div align = 'izquierda' class = 'rightDiv'>"); out.println (descripción2); out.println ("</div>"); out.println ("</div>"); out.println ("</fiieldset> </div>"); out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); }}El efecto de operación del programa se muestra en la figura:
Este artículo se ha compilado en "Resumen de las técnicas de operación de carga Java", y todos son bienvenidos a aprender y leer.
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.