Ver Mensaje Individual
  #6 (permalink)  
Antiguo 03/05/2012, 17:24
chinanzio
 
Fecha de Ingreso: marzo-2007
Mensajes: 82
Antigüedad: 17 años, 1 mes
Puntos: 21
Respuesta: Subir fichero como parte de un form

Ok, mira yo una vez tuve que hacer un sistema de subida de ficheros con barra de progreso, osea, asincronamente tal cual lo necesitas, y empezé por un codigo como el siguiente (claro que luego se complico la cosa)
Tambien usaba esas librerías

En la pagina del formulario una cosa asi
Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  4. <title>Insert title here</title>
  5. </head>
  6.     <form action="">
  7.         <select name="elSelect">
  8.             <option value="1">1</option>
  9.             <option value="2">2</option>
  10.             <option value="3">3</option>
  11.         </select>
  12.        
  13.         <input type="hidden" name="fileId" value="12345" />
  14.         <br/>
  15.         <iframe src="fileform.jsp?fileId=12345" style="width: 100%; border: none;"></iframe>
  16.         <br/>
  17.         <input type="submit" value="subir formulario"></input>
  18.     </form>
  19. </body>
  20. </html>

en fileform.jsp
Código HTML:
Ver original
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  5. <title>Insert title here</title>
  6.  
  7. <script type="text/javascript">
  8. function submitForm() {
  9.     var form = document.getElementById("fomrId");
  10.     form.submit();
  11. }
  12. </head>
  13. <form method="post" enctype="multipart/form-data" id="fomrId" action="uploadFileServlet.jsp">
  14.     <input type="file" name="elFichero" onchange="submitForm();"></input>
  15.     <input type="hidden" name="fileId" value="<%=request.getParameter("fileId") %>" />
  16. </form>
  17. </body>
  18. </html>

y en uploadFileServlet.jsp (claro que esto lo puse por comodidad, el manejo del fichero se haría de otra manera)
Código HTML:
Ver original
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  5. <title>Insert title here</title>
  6. </head>
  7. ARCHIVO CARGADO
  8. </body>
  9. </html>

El sistema es el siguiente:
cuando el usuario selecciona un fichero, este es subido automaticamente en un formulario que está en el iframe, este formulario contiene el fichero y un fileId, en el servidor tienes que poner el fichero como temporal asociado al fileId que mas tarde utilizaras cuando se haga el submit del formulario que tiene el select (el de la primera pagina).
Cuando se haga el submit del primer formulario, éste contendrá el fileId que deberás utilizar para manipular el fichero que se habia subido.

Tienes que tener en cuenta un par de cosas, como por ejemplo si haces el submit del primer formulario antes de que el fichero termine de ser subido
También podes controlar si el usuario quiere cambiar el fichero (gmail tiene un sisema de checkboxes)
Si queres ponerle una barra de progreso la cosa es un poco (solo un poco) mas complicada
Y seguramente mas cosas

A lo mejor no es exactamente lo que necesitas pero creo que te servirá de ayuda
__________________
Hazle un favor a tu cerebro y juega Ajedrez online
Chess online

Última edición por chinanzio; 03/05/2012 a las 17:30