AJAX - Como puedo capturar el nombre mientras subo archivos al servidor

 
Vista:
Imágen de perfil de Yoel
Val: 8
Ha mantenido su posición en AJAX (en relación al último mes)
Gráfica de AJAX

Como puedo capturar el nombre mientras subo archivos al servidor

Publicado por Yoel (2 intervenciones) el 20/01/2021 23:22:21
Hola, tengo la siguiente situación. Estoy subiendo múltiples archivos al servidor pero necesito que una ves que el archivo este en el servidor me muestra el nombre y así sucesivamente con los que siguen. El proceso lo esto haciendo mediante ajax y php. Los archivos me suben sin problema pero el mensaje que recibo es el del último archivo y no mientras están subiendo. Les dejo el código para ver si me pueden ayudar.

Gracias

HTML

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<div id="myModalmultpl" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
        <h3 id="myModalLabel">Subir doctumento</h3>
    </div>
    <div class="modal-body">
        <?php echo for_open('#', array('class' => 'form-signin', 'id' =>'form-polizam')); ?>
        <div id="idsubiendo"></div>
        <input type="file" name="uploadfile[]" id="uploadfile[]" multiple />
        <input type="hidden" name="tipoupload" id="tipoupload" value="1" >
        <input type="button" name="submit" id="idsubmit" value="Subir">
        <?php echo for_close(); ?>
    </div>
    <div class="modal-footer">
        <button class="btn" data-dismiss="modal" aria-hidden="true">Cerrar</button>
    </div>
</div>

Javascript

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
$("#idsubmit").on('click', function () {
 
 try {
 
  //obtenemos un array con los datos del archivo
  var dataString = new FormData($("#form-polizam")[0]);
  $.ajax({
   url: 'index.php?c=gpagar&f=setgdrive',
   type: 'POST',
   data: dataString,
   cache: false,
   contentType: false,
   processData: false,
   dataType: 'json',
   beforeSend: function () {
    $("div#idsubiendo").html('<div class="alert alert-success"><b>Subiendo ...</b></div>');
   },
   //una vez finalizado correctamente
   success: function (data) {
    console.log(data);
    bootbox.alert("<h6>El fichero ha sido subido al Google Drive: "+data.error+"</h6>");
    location.reload();
   },
   //si ha ocurrido un error
   error: function (data) {
    console.log(data);
    $("div#idsubiendo").html('');
    bootbox.alert("A ocurrido un error por favor contacte con  el administrador");
   }
  });
 
 } catch (err) {
  bootbox.alert(err);
 }
});

Php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
foreach($datos as $val){
     unset($_SESSION['idPol']);
     $nombre = $val['name'];
     $ext = pathinfo($nombre, PATHINFO_EXTENSION);
     $aNombre = explode("-",$nombre);
     $fecha = $aNombre[0]."-".$aNombre[1]."-".$aNombre[2];
     //Traemos el id del movimiento.
     $idmov = preg_replace('/[^0-9]+/','', $aNombre[4]);
     $objMov = $gpa->get_movAutoId($idmov, $fecha);
     $_SESSION['idPol'] = $objMov->id;
     //Conformamos el nombre del fichro
     $nameFile = $gpa->set_namefile($objMov->id_mov);
 
     $path = "lib/gdriver/files/";
     $nom = $path.$nombre;
     $nom2 = $path.$nameFile.".".$ext;
     rename($nom, $nom2);
     //Extraemos el id de la empresa.
     $obj = $emp->get_empresaNomId($aNombre[3]);
     $fileid = $gpa->set_datagdrive($nameFile.".".$ext, $obj->id, $fecha);
     $jdata['error'] = $fileid;
   }
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de joel
Val: 87
Oro
Ha mantenido su posición en AJAX (en relación al último mes)
Gráfica de AJAX

Como puedo capturar el nombre mientras subo archivos al servidor

Publicado por joel (30 intervenciones) el 21/01/2021 10:27:12
Hola Yoel, creo que el problema lo tienes en que envías todos los archivos en una sola llamada AJAX, por eso solo recibes una respuesta de ajax.
Si quieres enviar tener varias respuestas, tendrás que hacer varios envíos... mira este código de ejemplo:
https://www.lawebdelprogramador.com/codigo/PHP/6162-Ejemplo-de-arrastrar-y-soltar-archivos-drag-and-drop-con-PHP-y-JavaScript.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Yoel
Val: 8
Ha mantenido su posición en AJAX (en relación al último mes)
Gráfica de AJAX

Como puedo capturar el nombre mientras subo archivos al servidor

Publicado por Yoel (2 intervenciones) el 22/01/2021 01:10:41
Hola Joel, muchas gracias por la explicación me fue de gran ayuda. A continuación te dejo el código final y me trabajando sin problema.

Código Javascript

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
const input = document.getElementById('uploadfiles[]');
if(input.files && input.files[0])
    datos = input.files;
$.each(datos,function (index, value) {
 
    console.log(index+" "+value.name);
 
    var dataString = new FormData($("#form-polizam")[0]);
        dataString.append('uploadfile', value);
 
    $.ajax({
        url: 'index.php?c=gpagar&f=setgdrive',
        type: 'POST',
        data: dataString,
        cache: false,
        contentType: false,
        processData: false,
        dataType: 'json',
        beforeSend: function () {
            $("div#idsubiendo").html('<div class="alert alert-success"><b>Subiendo ... </b></div>');
        },
        //una vez finalizado correctamente
        success: function (data) {
            console.log(data);
            $("div#idsubiendo").html('<div class="alert alert-success"><b>El fichero ha sido subido al Google Drive: '+data.error+' </b></div>');
        },
        //si ha ocurrido un error
        error: function (data) {
            console.log(data);
            $("div#idsubiendo").html('');
            bootbox.alert("A ocurrido un error por favor contacte con  el administrador");
        }
    });
});

Código Php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$datos = upload_file($config);
unset($_SESSION['idPol']);
$nombre = $datos['name'];
$ext = pathinfo($nombre, PATHINFO_EXTENSION);
$aNombre = explode("-",$nombre);
$fecha = $aNombre[0]."-".$aNombre[1]."-".$aNombre[2];
//Traemos el id del movimiento.
$idmov = preg_replace('/[^0-9]+/','', $aNombre[4]);
$objMov = $gpa->get_movAutoId($idmov, $fecha);
$_SESSION['idPol'] = $objMov->id;
//Conformamos el nombre del fichro
$nameFile = $gpa->set_namefile($objMov->id_mov);
 
$path = "lib/gdriver/files/";
$nom = $path.$nombre;
$nom2 = $path.$nameFile.".".$ext;
rename($nom, $nom2);
//Extraemos el id de la empresa.
$obj = $emp->get_empresaNomId($aNombre[3]);
$fileid = $gpa->set_datagdrive($nameFile.".".$ext, $obj->id, $fecha);
$jdata['error'] = $nameFile.".".$ext;
echo json_encode($jdata);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de joel
Val: 87
Oro
Ha mantenido su posición en AJAX (en relación al último mes)
Gráfica de AJAX

Como puedo capturar el nombre mientras subo archivos al servidor

Publicado por joel (30 intervenciones) el 22/01/2021 12:20:50
Me alegro que te sirviera... gracias por comentarlo!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar