Subir varios archivos FTP

Iniciado por SrTrp, 14 Febrero 2020, 06:10 AM

0 Miembros y 1 Visitante están viendo este tema.

SrTrp

Hola que tal lo que quiero es subir varias imagenes via ftp pero solo logro subir la primera que escojo, no conozco bien las propiedades del $_FILE, intente crear un for basado en el SIZE del $_FILE pero solo me da el tamaño del archivo mas no cuantos tengo.
Aqui esta donde tengo el script y lo mando via ajax
Código (html4strict) [Seleccionar]

<input id="archivo" type="file"  name="archivo" multiple>
<button type="button" id="files"> Subir </button>
<script src="jquery.js"></script>
<script>
   

$(document).ready(function () {
       $('#files').click(function () {
            var datos = $('#archivo').prop('files')[0];

            var form_data = new FormData();                  
            form_data.append('file', datos );
           $.ajax({
               data: form_data ,
               url: "subida.php",
               type: "POST",
               contentType: false,
               processData: false,
               success:
                       function (r) {
                           alert('' + r);
                       }
           });
       });
   });
</script>

Y aqui esta mi php
Código (php) [Seleccionar]

<?php
$ftp_server 
"127.0.0.1";
$ftp_usuario "root";
$ftp_pass "";
$con_id ftp_connect($ftp_server);
$lr ftp_login($con_id$ftp_usuario$ftp_pass);

if ((!
$con_id) || (!$lr)) {
    echo 
'NO SE PUDO CONECTAR';
    exit;
} else {
    echo 
'CONECTADO CORRECTAMENTE';        
        if (!empty(
$_FILES['file']['name'])) {
            
$temp explode("."$_FILES['file']['name']);
            
$source_file $_FILES['file']['tmp_name'];          
 
$nombre $_FILES['file']['name'];
    
            
$subio ftp_put($con_id,  $nombre$source_fileFTP_BINARY);
    
            if ( 
$_FILES['file']['error'] ) {
                echo 
'Error: ' $_FILES['file']['error'] . '<br>';
            }
            else {
               
               
print_r($_FILES['file']['name']);
            }
        } else {
            echo 
' NO SELECCIONÓ NINGUN ARCHIVO';
        }

    
}

?>


mr-medi

Muy buenas, lo que puedes hacer es poner en el atributo "name" del input los corchetes para indicar al php que se trata de un array.
Código (xml) [Seleccionar]

<input id="archivo" type="file"  name="archivos[]" multiple>


En tu código js te recomendaría que le pases un nombre al parámetro para luego en el php coger los datos en base al nombre.
Código (javascript) [Seleccionar]

$.ajax({
                data :
                {
                         "files":form_data
                } ,
                url: "subida.php",
                type: "POST",
                contentType: false,
                processData: false,
                success:
                        function (r)
                        {
                            alert('' + r);
                        }
            });


Después desde php para facilitar las cosas en vez de usar el array global $_FILES puedes coger el parámetro POST que yo he llamado "files" para coger el array de ficheros.
Código (php) [Seleccionar]

$files = $_POST["files"];
foreach($files as $file)
{
      //Subir fichero al ftp
}


Aquí te dejo documentación con ejemplos.
https://www.php.net/manual/en/features.file-upload.multiple.php

Saludos


<?php
       header
("Location: TheHackerWay");

@XSStringManolo

$_FILES es un array. Usa count para obtener el tamaño de un array.
$numArchivos = count($_FILES);

Igual te interesa filtrar y demás. Mirando por SO dicen que puede ser necesario para remover strings vacios del array.

https://stackoverflow.com/questions/2704314/multiple-file-upload-in-php