Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/01/2010, 07:05
sesebas
 
Fecha de Ingreso: enero-2009
Mensajes: 173
Antigüedad: 15 años, 3 meses
Puntos: 1
Un problema mayor en la descarga de archivos con php

Hola amigos,

He estado trabajando en la habilitación de un botón para descargar archivos xls asociados a opciones en un select múltiple. Con la ayuda de los miembros del foro Paynalton y maycolalvarez conseguí que al seleccionar una o más opciones del select se forzara la descarga y los archivos fuesen servidos con php. Ahora tengo dos problemas para los que necesito ayuda.

1. Para cada archivo asociado a la opción seleccionada se abre la ventana de windows con las opciones de "abrir", "guardar", "cancelar". El problema aquí es que sólo la ventana de descarga para el último archivo servido aparece con el foco en la opción "guardar"; mientras que en las restantes el foco aparece en "cancelar". Cómo podría hacer para que cuando se ha guardado un archivo, la siguiente ventana aparezca con el foco en "guardar"?

2.- El problema mayor es que cuando bajo los archivos usando Firefox, estos están bien, perooo cuando los bajo usando IExplorer me encuentro con que al abrirlos en excel NO TIENEN DATOS!!! Será que alguien me da una pista para saber que ocurre?

A continuación el código que utilizo:

Código Javascript:
Ver original
  1. <script language="JavaScript" type="text/JavaScript">
  2.  
  3.  var archivos=new Array();
  4.  var indiceActual=1;
  5.  var downloader;
  6.    
  7.            function DownloadFunction(){
  8.  
  9.             var x =1;
  10.  
  11.             var Noptions = document.forms["form1"].selector3.length;
  12.            //  for(i in document.form1.selector3.options){ // Esta línea hacía que en IE no funcionara el resto de la función
  13.              
  14.                   for (i = 0; i < Noptions; i++) {
  15.                
  16.                    if(document.form1.selector3.options[i].selected)
  17.                          {
  18.                         archivos[x]=document.form1.selector3.options[i].value;
  19.                         archivos[x]=archivos[x].replace(".htm",".xls");  
  20.                         x++;
  21.                                              }
  22.                       }
  23.                                     indiceActual=1;
  24.                                     downloader=setInterval('descargame();',1000);
  25.                                     }
  26.  
  27.      function descargame()
  28.                  {
  29.                         if(archivos[indiceActual])
  30.                         {
  31.                                              location.href=".../download.php?archivo="+archivos[indiceActual];
  32.              indiceActual++;
  33.                         }
  34.                  else
  35.                         {
  36.                        indiceActual=1;
  37.                        archivos=new Array();
  38.                        clearInterval(downloader);
  39.                        }
  40.                  }
  41.  
  42. </script>

Y en el archivo "download.php"...

Código PHP:
Ver original
  1. <?php
  2.  
  3. if (!isset($_GET['archivo']) || empty($_GET['archivo'])) {
  4.     exit();
  5. }
  6.  
  7. $root = ".../ExcelFiles/";
  8. $archivo = basename($_GET['archivo']);
  9. $path = $root.$archivo;
  10.                                                            
  11.     $type = '';                                                              
  12.     $type = "application/force-download";                                
  13.                                                                          
  14.                                                                          
  15.     header("Content-Type: $type");                                        
  16.     header("Content-Disposition: attachment; filename=$archivo");        
  17.     header("Content-Transfer-Encoding: binary");                          
  18.     header("Content-Length: " . $size);                                  
  19.                                                                          
  20.     readfile($path);                                                      
  21.  
  22. ?>

Gracias por la ayuda que me puedan dar.