form conjuntamente con input type fle, type text y otros
form conjuntamente con input type fle, type text y otros
De forma general el uso del <form> .. </form> es con tipos text, checkbox ,. radio,hidden y actualmente con html5 con nuevas opciones como email, date number etc, son del trabajo cotidiano de la programación en la web, incluso en algunos casos también con type="file" que nos permite eventualmente seleccionar archivos para ser descaragados a nuestro sistema, hasta hay nada nuevo y no suelen haber muchos inconvenientes en este manejo, el problema surge cuando se trata de combinar los distintos type y se incluye en ellos un type="file".
En el caso a continuación se ilustra el caso:
---------------------------------------------------------------------------------------------------------------------------
<form name = "myFormato" enctype="MULTIPART/FORM-DATA"
method = "post"
action = "./CorreoCrear.jsp"
onsubmit= "return validate()"
>
<center>
<table border=4 cellpadding="0" cellspacing="0"
bgcolor=<%=colorZona%>>
<tr>
<td>
<font color=<%=colorNecesario%> size="4">
Asunto
</font>
</td>
</tr>
<tr>
<td align=center>
<input class = "correoAsunto" required
name = "correoAsunto"
type = "text"
size = "50"
value = ""
>
</td>
</tr>
<tr>
<tr>
<td>
<font color=<%=colorNecesario%> size="4">
Correo
</font>
</tr>
<tr>
<td align=center>
<textarea class="correoCuerpo" required
name ="correoCuerpo"
cols ="100"
rows ="15">
</textarea>
</td>
</tr>
<tr>
<td>
<font color=<%=colorNoNecesario%> size="4">
Adjunto
</font>
</td>
</tr>
<tr>
<td align=center>
<input type="file" name="correoAdjunto" />
<td>
<tr>
<tr>
<td bgcolor=<%=colorFondoGrabar%> colspan=2 align=center>
<input type="image" name="grabar" src="../imagenes/Grabar.gif" >
<font color=<%=colorGrabar%> size="5">
Grabar
</font>
</td>
</tr>
</table>
</form>
----------------------------------------------------------------------------------------------------------
Lo primero que hay que tener en cuenta es que bajo el mismo <form></form>
se debe definir UN SOLO enctype, en los casos generales es sistema lo coloca por defecto y es enctype="application/x-www-form-urlencoded" , si se deja aí para type="File" no funciona , entonces hay que cambiarlo como en el caso que nos ocupa a enctype="MULTIPART/FORM-DATA".
Pero se nos presenta un problema y es que al definir el nuevo enctype, la entrada de datos ya NO ESTA EN EL CLIENTE sino en el servidor y por lo tanto
nuestro convencional request.getParameter("correoAsunto") NO FUNCIONA, para ninguno de los input defindos , por lo dicho atras, es neesario
entonces recurrir a una forma un poco mas elaborada para conseguir el nombre de los campos y sus valores.
El sistems se va en utilizar
FileItemFactory file_factory = new DiskFileItemFactory() ; ServletFileUpload servlet_up = new ServletFileUpload(file_factory) ;
List <FileItem> items = servlet_up.parseRequest(request) ; for (FileItem item : items)
Que nos permite revisar un lista de par/valor con los nombres de los
campos y su contenido en la variable de tipo List items, en la itereacción
sobre la lista preuntamso si el campo obtenido es de tipo convncional o
un campo de almacenamiento de archivos tipo file, en cado caso hacn un
proceso independente para almacenar y operar con los disitntos valores.
En el caso que nos ocuoa de ua forma burda con animos de demostración se indica como obtiene las variables correoAsunto, correoCuerpo y correoAdjunto
para que esten alineados con los valores indicados en los correspondientes
<input>
En el caso especifico del archivo, almacena el contenido del archivo descargado
en un una carpeta del servidor /usr/local/tomcat/webapps/sosadmor/correos/
Desde allí usando el documento anterior , http://cac9999.blogspot.com/2014/02/envio-de-un-email-con-texto-html-e.html , puedo enviarlos por un correo, o solo almacenarlos para presentarlos más tarde.
mediante
File archivo_server = new File(correoAdjunto) ;
item.write(archivo_server) ;
archivoContenido = item.getInputStream() , fue utilizado en otro contexto
para enviar un correo con la información del archivo adjunto , sin
almacenarlo previamente , sino de fomra directa, mediante la interafce DataSource .
--------------------------------------------------------------------------------------------------------------------
<! recordar instalar en tomcat/lib los archivos jar >
<! commons-fileupload-1.2.2.jar commons-io-2.4.jar >
<! para que el capturador de archivos file funcione. >
<%@ page language="java"
import="java.io.*"
import="java.util.*"
import="java.text.*"
import="javax.mail.*"
import="javax.mail.internet.*"
import="javax.activation.*"
import="java.util.Date"
import="org.apache.commons.fileupload.*"
import="org.apache.commons.fileupload.disk.*"
import="org.apache.commons.fileupload.servlet.*"
import="org.apache.commons.io.*"
// Defino algunas variables de interes mas adelante
String campoNombre = new String() ;
String campoValor = new String() ;
String archivoNombre = new String() ;
InputStream archivoContenido = null ;
%>
FileItemFactory file_factory = new DiskFileItemFactory() ;
ServletFileUpload servlet_up = new ServletFileUpload(file_factory) ;
List <FileItem> items = servlet_up.parseRequest(request) ;
for (FileItem item : items)
{
if (item.isFormField())
{
// Procesa campos regulares del tipo (input type="text|radio|checkbox|etc", select, etc).
campoNombre = item.getFieldName() ;
campoValor = item.getString() ;
if (campoNombre.equals("correoAsunto"))
{
correoAsunto = campoValor ;
}
if (campoNombre.equals("correoCuerpo"))
{
correoCuerpo = campoValor ;
}
}
}
else
{
// Procesa campos del tipo (input type="file").
campoNombre = item.getFieldName() ;
archivoNombre = FilenameUtils.getName(item.getName()) ;
archivoContenido = item.getInputStream() ;
if (campoNombre.equals("correoAdjunto"))
{
correoAdjunto = "/usr/local/tomcat/webapps/sosadmor/correos/";
File archivo_server = new File(correoAdjunto) ;
item.write(archivo_server) ;
}
}
}
De forma general el uso del <form> .. </form> es con tipos text, checkbox ,. radio,hidden y actualmente con html5 con nuevas opciones como email, date number etc, son del trabajo cotidiano de la programación en la web, incluso en algunos casos también con type="file" que nos permite eventualmente seleccionar archivos para ser descaragados a nuestro sistema, hasta hay nada nuevo y no suelen haber muchos inconvenientes en este manejo, el problema surge cuando se trata de combinar los distintos type y se incluye en ellos un type="file".
En el caso a continuación se ilustra el caso:
---------------------------------------------------------------------------------------------------------------------------
<form name = "myFormato" enctype="MULTIPART/FORM-DATA"
method = "post"
action = "./CorreoCrear.jsp"
onsubmit= "return validate()"
>
<center>
<table border=4 cellpadding="0" cellspacing="0"
bgcolor=<%=colorZona%>>
<tr>
<td>
<font color=<%=colorNecesario%> size="4">
Asunto
</font>
</td>
</tr>
<tr>
<td align=center>
<input class = "correoAsunto" required
name = "correoAsunto"
type = "text"
size = "50"
value = ""
>
</td>
</tr>
<tr>
<tr>
<td>
<font color=<%=colorNecesario%> size="4">
Correo
</font>
</tr>
<tr>
<td align=center>
<textarea class="correoCuerpo" required
name ="correoCuerpo"
cols ="100"
rows ="15">
</textarea>
</td>
</tr>
<tr>
<td>
<font color=<%=colorNoNecesario%> size="4">
Adjunto
</font>
</td>
</tr>
<tr>
<td align=center>
<input type="file" name="correoAdjunto" />
<td>
<tr>
<tr>
<td bgcolor=<%=colorFondoGrabar%> colspan=2 align=center>
<input type="image" name="grabar" src="../imagenes/Grabar.gif" >
<font color=<%=colorGrabar%> size="5">
Grabar
</font>
</td>
</tr>
</table>
</form>
----------------------------------------------------------------------------------------------------------
Lo primero que hay que tener en cuenta es que bajo el mismo <form></form>
se debe definir UN SOLO enctype, en los casos generales es sistema lo coloca por defecto y es enctype="application/x-www-form-urlencoded" , si se deja aí para type="File" no funciona , entonces hay que cambiarlo como en el caso que nos ocupa a enctype="MULTIPART/FORM-DATA".
Pero se nos presenta un problema y es que al definir el nuevo enctype, la entrada de datos ya NO ESTA EN EL CLIENTE sino en el servidor y por lo tanto
nuestro convencional request.getParameter("correoAsunto") NO FUNCIONA, para ninguno de los input defindos , por lo dicho atras, es neesario
entonces recurrir a una forma un poco mas elaborada para conseguir el nombre de los campos y sus valores.
El sistems se va en utilizar
FileItemFactory file_factory = new DiskFileItemFactory() ; ServletFileUpload servlet_up = new ServletFileUpload(file_factory) ;
List <FileItem> items = servlet_up.parseRequest(request) ; for (FileItem item : items)
Que nos permite revisar un lista de par/valor con los nombres de los
campos y su contenido en la variable de tipo List items, en la itereacción
sobre la lista preuntamso si el campo obtenido es de tipo convncional o
un campo de almacenamiento de archivos tipo file, en cado caso hacn un
proceso independente para almacenar y operar con los disitntos valores.
En el caso que nos ocuoa de ua forma burda con animos de demostración se indica como obtiene las variables correoAsunto, correoCuerpo y correoAdjunto
para que esten alineados con los valores indicados en los correspondientes
<input>
En el caso especifico del archivo, almacena el contenido del archivo descargado
en un una carpeta del servidor /usr/local/tomcat/webapps/sosadmor/correos/
Desde allí usando el documento anterior , http://cac9999.blogspot.com/2014/02/envio-de-un-email-con-texto-html-e.html , puedo enviarlos por un correo, o solo almacenarlos para presentarlos más tarde.
mediante
File archivo_server = new File(correoAdjunto) ;
item.write(archivo_server) ;
archivoContenido = item.getInputStream() , fue utilizado en otro contexto
para enviar un correo con la información del archivo adjunto , sin
almacenarlo previamente , sino de fomra directa, mediante la interafce DataSource .
--------------------------------------------------------------------------------------------------------------------
<! recordar instalar en tomcat/lib los archivos jar >
<! commons-fileupload-1.2.2.jar commons-io-2.4.jar >
<! para que el capturador de archivos file funcione. >
<%@ page language="java"
import="java.io.*"
import="java.util.*"
import="java.text.*"
import="javax.mail.*"
import="javax.mail.internet.*"
import="javax.activation.*"
import="java.util.Date"
import="org.apache.commons.fileupload.*"
import="org.apache.commons.fileupload.disk.*"
import="org.apache.commons.fileupload.servlet.*"
import="org.apache.commons.io.*"
// Defino algunas variables de interes mas adelante
String campoNombre = new String() ;
String campoValor = new String() ;
String archivoNombre = new String() ;
InputStream archivoContenido = null ;
%>
FileItemFactory file_factory = new DiskFileItemFactory() ;
ServletFileUpload servlet_up = new ServletFileUpload(file_factory) ;
List <FileItem> items = servlet_up.parseRequest(request) ;
for (FileItem item : items)
{
if (item.isFormField())
{
// Procesa campos regulares del tipo (input type="text|radio|checkbox|etc", select, etc).
campoNombre = item.getFieldName() ;
campoValor = item.getString() ;
if (campoNombre.equals("correoAsunto"))
{
correoAsunto = campoValor ;
}
if (campoNombre.equals("correoCuerpo"))
{
correoCuerpo = campoValor ;
}
}
}
else
{
// Procesa campos del tipo (input type="file").
campoNombre = item.getFieldName() ;
archivoNombre = FilenameUtils.getName(item.getName()) ;
archivoContenido = item.getInputStream() ;
if (campoNombre.equals("correoAdjunto"))
{
correoAdjunto = "/usr/local/tomcat/webapps/sosadmor/correos/";
File archivo_server = new File(correoAdjunto) ;
item.write(archivo_server) ;
}
}
}
Comentarios
Publicar un comentario