¿Como puedo subir un archivo a mi servidor mediante PHP, AJAX, JAVASCRIPT?

publicado por: Anonymous

Tengo problemas para subir un archivo a mi servidor, NO PUEDO leer el $_FILES[‘archivo’][‘name’] después de haber pasado por AJAX, utilizo el siguiente código:

HTML index.php

<html>
<head>
    <meta charset="UTF-8">
    <script type="text/javascript" src="jquery-3.3.1.min.js"></script>
    <script type="text/javascript" src="jquery-3.3.1.js"></script>
    <script type="text/javascript" src="funciones.js"></script>
</head>
<body>
    <form id="frmNuevoArchivo" name="frmNuevoArchivo" enctype="multipart/form-data">
        <input id="archivo" type="file"  name="archivo">
        <button type="button" id="btnNuevoArchivo" name="btnNuevoArchivo" class="btn"> Registrar </button>
    </form>
</body>

JS funciones.js

$(document).ready(function () {
    $('#btnNuevoArchivo').click(function () {
         var datos = $('#frmNuevoArchivo').serialize();
        $.ajax({
            data: datos,
            url: "subir.php",
            type: "POST",
            success:
                    function (r) {
                        alert('' + r);
                    }
        });
    });
});

PHP subir.php

    $ftp_server = "MI IP";
$ftp_usuario = "usuario";
$ftp_pass = "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['archivo']['name'])) {
        $temp = explode(".", $_FILES['archivo']['name']);
        $source_file = $_FILES['archivo']['tmp_name'];
        $destino = "CARPETA";
        $nombre = $_FILES['archivo']['name'];

        $subio = ftp_put($con_id, $destino . '/' . $nombre, $source_file, FTP_BINARY);

        if ($subio) {
            echo '  ARCHIVO SUBIÓ';
        } else {
            echo '  ARCHIVO NO SUBIÓ';
        }
    } else {
        echo ' NO SELECCIONÓ NINGUN ARCHIVO';
    }
}
?>

ERROR

Undefined index: archivo in subir.php on line 3

solución

Intenta modificar un poco tu script de esta forma.

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

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

En PHP recibelo asi.


if ( 0 < $_FILES['file']['error'] ) {
        echo 'Error: ' . $_FILES['file']['error'] . '<br>';
    }
    else {
       #Todo tu codigo si el archivo se recibió correctamente.
       print_r($_FILES['file']['name']);
    }
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *