Carga y descarga de archivos
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 factory = new DiskFileItemFactory (); // 2. Cree la clase de herramienta Core de carga de archivos ServletFileUpload upload = new ServLetFileUpload (fábrica); // 1. Establezca el tamaño máximo permitido para un solo archivo: 30MUPLOAD.SetFileSizeMax (30*1024*1024); // 2. Establezca el tamaño total permitido para el archivo de la carga de archivo: Formulario de carga de la carga: 80mupload.SetSizEmax (80*1024*1024); // 3. Establezca la codificación del nombre del archivo del formulario de carga // equivalente a: request.setcharacterEncoding ("UTF-8"); upload.setheaderEncoding ("UTF-8"); // 3. Determine: si el formulario actual es un formulario de carga de archivos si (upload.ismultipartContent (request)) {// 4. Convertir los datos solicitados en archivos de archivo y luego encapsular list <silitem> list = upload.OpSeadequest (request); // traver la carga: get cada dato upcado (fileitem> list = uploadadead = uploadad = upload: uploadem: iptintem: uptom: iptomem: upmInts: upload: uploadead: uploadem: upchoad data: upcho up (fileItem> INTER list) {// juicio: datos de texto normales if (item.isformfield ()) {// TEXTO Normal Data String fieldName = item.getFieldName (); // Forma de nombre de elemento String content = element.getString (); // Nombre del elemento de formulario, datos correspondientes //item.getstring("UTF-8 "); Especifique el sistema de codificación. // 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. Nombre de archivo Cambiar nombre* Para diferentes usuarios readme.txt archivos, ¡no quiera que se sobrescriban! * 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 el nombre del archivo = id + "#" + name; // Obtener la ruta de carga de la carga de la ruta de la base = getServletContext (). GetRealPath ("/upload"); // Cree el archivo de archivo de destino Archivo = nuevo archivo (ruta, nombre); // Clase de herramienta, archivo ipload 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, procesando la implementación!");}} Catch (excepción e) {E.PrintStackTRace ();}} // Implementación manual de la implementación manual del proceso Private Void upload (HtTtPserveRetRetLet). IoException, UnsupportedEncodingException {/*Request.getParameter (""); // get/postrequest.getQuerystring (); // Obtener los datos enviados por Get Solic.GetInputStream (); // Obtenga los datos enviados por Post*// ******************** obtener manualmente Datos de carga de archivo **************** /// 1. Obtenga el flujo de datos de formulario InputStream in = request.getInputStream (); // 2. Convertir Stream InputStreamReader Insteam = New InputStreamReader (in, "UTF-8"); // 3. BufferedReader lector = new BufferedReader (InSteam); // String de datos de salida Str = null; while ((str = reader.readline ())! = Null) {system.out.println (str);} // cierra lector.cloose (); Insteam.close (); in.close ();} public void (httpServeReReStread, hettEntreRe Respuesta) 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
/*** El archivo de proceso cargue y descarga*@author jie.yuan **/public class FileServlet extiende httpservlet {public void doget (httpservletRequest solicitud, httpservletResponse respuesta) lanza servletException, ioexception {// solicitar parámetros: diferentes tipos de operación = solicitud. ("cargar" .equals (método)) {// cargar carga (solicitud, respuesta);} else if ("downlist" .equals (método)) {// Ingrese la lista de descarga downlist (request, respuesta);} else if ("abajo" .equals (método) {// descargar hacia abajo (solicitud, respuesta);}}/*** 1. upload*/private void upload (cargando (cargar (metod)) HttpServletResponse Respuesta) lanza ServletException, IOException {try {// 1. Cree Factory Object FileItemFactory Factory = new DiskFileItemFactory (); // 2. File Clood Clood Core Tool Class ServletFileFilead upload = New ServletFileUpload (Factory); // Establecer parámetros de límite de límite de límite de límite upload.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 los datos de solicitud a la lista de recopilación de la lista <1Sitem> list = upload.parserequest (request); // traversal para (fileItem item: list) {// juicio: datos de texto normal si (elemento Valor de cadena = item.getString (); System.out.println (valor);} // Artículo de archivo item Ose {/************** Subida de archivo **************** /// a. Obtenga el nombre del nombre del archivo name = item.getName (); // --- maneje el problema de cargar el nombre del archivo duplicado --- // 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 (excepción e) {e.printstackTrace ();}}/*** 2. Ingrese la lista de descarga*/private void downlist (httpservletRequest solicitud, httpServletResponse respuesta) tira servicción de la entrada de los archivos de los archivos de la implementación de todos los archivos de los archivos de los archivos de la implementación de los archivos. directorio, y luego guardar; Salta a la lista Down.jsp para mostrar // 1. Inicialice la colección de mapas de 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 (). i <list.length; Reenviar request.getRequestDispatcher ("/downlist.jsp"). Forward (solicitud, respuesta);}/*** 3. Handle descarga*/private void down (httpservletRequest solicitud, httpServletResponse Respuesta) lanza ServletException, IOException {// obtiene el nombre del archivo descargado por el usuario (datos de append después de la dirección de URL, get) cita fileException = cita fileNeMe. request.getParameter ("FileName"); FileName = new String (FileName.getBytes ("ISO8859-1"), "UTF-8"); // Obtener la ruta de subida de carga String BasePath = GetServletContex Si el nombre del archivo es chino, la codificación de URL debe realizarse filename = urlencoder.enCode (nombre de archivo, "utf-8"); // Establezca el encabezado de respuesta para descargar. len = -1; while ((len = in.read (b))! = -1) {out.write (b, 0, len);} // cerrar.close (); in.close ();} public void dopost (httpservletRequest solicitud, respuesta httpservletreSponse) lanza ServletException, ioexception {this.doget (solicitud, respuesta);}}Desarrollo de correo
Trabajo de preparación, construcción del medio ambiente:
1. Construya un servidor de correo localmente
Easymail Server, EyoUmailServersetup.exe
2. Cree una nueva cuenta de correo electrónico
Zhang San envió un correo electrónico a Li Si.
Paso 1:
Cree un nuevo nombre de dominio: herramientas, configuración del servidor, ingrese itcast.com en el cuadro de nombre de dominio único
Paso 2:
Cree una nueva cuenta de correo electrónico: [email protected]
3. Instale Foxmail
Configurar el servidor de envío de correo electrónico (SMTP): localhost 25
Servidor de recepción de correo electrónico (POP3): Localhost 110
¡Crea una nueva cuenta y puedes recibir correos electrónicos!
Aviso
Aviso
Si es un proyecto web, porque Javaee viene con la función de correo electrónico, ¡puede haber problemas!
¡Necesitamos usar nuestra propia función de archivo mail.jar! ¡Debe eliminar el paquete de correo en Javaee!
usar:
Para el desarrollo de Javamail, primero introduzca archivos JAR:
Activation.jar [Si usa JDK1.6 o superior, no puede usar este archivo jar] mail.jar [enviar paquete central por correo electrónico]/*** 1. Enviar un correo electrónico normal*@author jie.yuan **/public class app_sendmail {@testpublic void testSend () arroja excepción {// 0. Propiedades de parámetros de correo Prop = new Properties (); prop.put ("mail.transport.protocol", "smtp"); // especificar el protocolo prop.put ("mail.smtp.host", "localhost"); // host stmp.qq.comprop.put ("mail.smtp.port", 25); // puerto prop.put ("mail.smtp.auth", "true"); // autenticación de contraseña de usuario prop.put ("mail.debug", "true"); // Modo de depuración // 1. Cree una sesión de una sesión de correo de correo = session.getDefaultInstance (PROP); // 2. Cree un objeto de cuerpo de correo (objeto de correo electrónico completo) MIMEMESSAGE Mensaje = new Mimemessage (sesión); // 3. Establecer parámetros del cuerpo de correo: //3.1 Message de título. Setsubject ("Mi primer correo electrónico"); // 3.2 Correo electrónico Envío de tiempo Message.setsentDate (nueva fecha ()); // 3.3 Mensaje de remitente. Setsender (New InternetDress ("[email protected]"); // 3.4 Message.etecipiente (DinesterType.To, new New, newe InternetAddress ("[email protected]")); // 3.5 contenido Message.settext ("Hola, se ha enviado correctamente! Text ..."); // mensaje de correo electrónico simple de texto sin formato. SaveChanges (); // Guardar correo electrónico (opcional) // 4. Enviar transferencia de transporte = session.getTransport (); trans.connect ("zhangsan", "888"); // Enviar correo a trans.sendMessage (Message, Message.GetAllEcpipients ()); trans.close ();}}Con fotos
/*** Correo electrónico con recursos de imagen*@author jie.yuan **/public class app_2sendWithimg {// Parámetros de inicialización Propiedades estáticas privadas prop; // remitente privado estático InternetDress sendman = null; static {prop = new Properties (); prop.put ("mail.transport.protocol", "smtp"); // especificar el protocolo prop.put ("mail.smtp.host", "localhost"); // host stmp.qq.comprop.put ("mail.smtp.port", 25); // especificar el protocolo prop.put ("mail.smtp.port", 25); // especificar el protocolo prop.put ("mail.smtp.port", "localhost"); // host stmp.qq.comprop.put ("mail.smtp.port", 25); // puerto prop.put ("mail.smtp.auth", "true"); // autenticación de contraseña de usuario prop.put ("mail.debug", "true"); // Modo de depuración intente {sendman = new InternetAddress ("[email protected]");} catch (DirectionException e) {Throw New RuntimeException (e);}}@testPublic void testSend () lanza Exception {// 1. Cree una sesión de sesión de correo Session = Session.getDeflaultinstance (prop); // 2. MIMEMESSAGE (SESIÓN); // 3. Establecer parámetros: título, remitente, destinatario, tiempo de envío, contenido Message.setsubject ("con correo de imágenes"); Message.setsender (Sendman); Message.setRecipient (destinationType.to, nuevo Internetaddress ("[email protected]")); Message.setsentDate (new Date ());/************************** Contenido de correo electrónico: Correo electrónico de usuario multifunción (Relacionado) **************************** /// 4.1 Construir un correo electrónico multifuncional Bloque de correo electrónico Mimemultipart Relacionado = NUEVO MIMEMULTIPART ("RELACIONADO"); // 4.2 CONSTRUCTO Multi-Función Bloque de correo electrónico = Texto de la izquierda en el contenido de Bloque a la derecha de la izquierda. content = new MimeBodyPart (); MimeBodyPart Resource = new MimeBodyPart (); // Establecer contenido específico: a. Resource (imagen) String filePath = app_2sendWithimg.class.getResource ("8.jpg"). GetPath (); dataSource ds = new FileDataSource (nuevo archivo (filePath)); Datahandler Handler = NewAhandler (ds); Resource.setDataHandler (Handler); RecursyCe.SetContid (");"); // Establecer el nombre del recurso y referencia a la clave extranjera // Establecer el contenido específico: b. Texto content.setContent ("<img src = 'cid: 8.jpg'/> ok!", "Text/html; charset = utf-8"); Relation.AddBodyPart (content); Relacts.AddBodyPart (recursos);/********* 4.3 Agregue los correos electrónicos complejos construidos a los correos electrónicos ***************/Message.setContent (RECORTE); session.getTransport (); trans.connect ("zhangsan", "888"); trans.sendMessage (Message, Message.getAllRecipients ()); trans.close ();}}Imágenes + archivos adjuntos
/*** 3. Correo electrónico con recursos de imagen y archivos adjuntos*@author jie.yuan **/public class app_3imgandatta {// Parámetros de inicialización Propiedades estáticas privadas prop; // remitente estático privado InternetDdress sendman = null; static {prop = new Properties (); prop.put ("mail.transport.protocol", "smtp");; // especificar el protocolo prop.put ("mail.smtp.host", "localhost"); // host stmp.qq.comprop.put ("mail.smtp.port", 25); // puerto prop.put ("mail.smtp.auth", "true"); // autenticación de contraseña de usuario prop.put ("mail.debug", "true"); // Modo de depuración intente {sendman = new InternetAddress ("[email protected]");} catch (DirectionException e) {Throw New RuntimeException (e);}}@testPublic void testSend () lanza Exception {// 1. Cree una sesión de sesión de correo Session = Session.getDeflaultinstance (prop); // 2. MIMEMESSAGE (SESIÓN); // 3. Establezca parámetros: título, remitente, destinatario, tiempo de envío, contenido Message.setsubject ("Correo con imagen"); Message.setsender (Sendman); Message.setRecipient (destinationType.to, nuevo Internetaddress ("[email protected]")); Message.setsentDate (new Date ());/** Desarrollo de correo con archivos adjuntos (imagen)*/// Construye un bloque de correo total Mimemultipart mixed = new mimemultipart ("mixed"); // -> El correo total es rápido, configurar en mensajes.setContent (mixed); // izquierda: (texto recurso de imagen) mimeBody de mimefody a la izquierda = new MimeBodyPart (////////////izquierda: right = new MimeBodyPart (); // Establecer en un bloque de correo total mixto. AddBodyPart (izquierda); mixed.addbodypart (derecha);/******* ACTUAL **********/String attr_path = this.getClass (). getResource ("a.docx"). getpath (); dataSource attr_ds = new FileDataSource (nuevo archivo (attr_path)); datahandler attr_handler = new New DataHandler (attr_ds); right.setDatahandler (attr_handler); right.setFileName ("a.docx");/************************** Estable ---> Establezca en la izquierda. Resource (imagen) String filePath = app_3imgandatta.class.getResource ("8.jpg"). GetPath (); dataSource ds = new FileDataSource (nuevo archivo (filePath)); Datahandler Handler = New Datahandler (DS); Resource.setAhAhandler (Handler); Resources // Establecer el nombre del recurso y referencia a la clave extranjera // Establecer el contenido específico: b. Text content.setContent ("<img src = 'cid: 8.jpg'/> ok!", "Text/html; charset = utf-8"); Relation.AddBodyPart (content); Related.AddBodyPart (Resource); // 5. SendTransport Trans = Session.getTransport (); trans.connect ("Zhangsan", ",",, ",", "888"); trans.sendMessage (Message, Message.GetAllRecipients ()); trans.close ();}}El anterior es el código de ejemplo para cargar y descargar archivos Java y enviar y recibir correos electrónicos que se le presentan. Espero que te sea útil. Si tiene alguna pregunta, déjame un mensaje y el editor le responderá a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!