Skip to content
Advertisement

input type file multiple jQuery laravel

i´m traying to do a web application, that i can attach any files into email and insert name in Database.

i can see post in this site about this topic, but i can´t do it.

i have a input multiple that with this i can select any files:

<input type="file" name="adjunto" id="adjunto" multiple>

with jQuery i´m traying get selected files:

var archivo = $("#adjunto").prop('files')[0];
var nombreArchivo = $("#adjunto").val();

this files or file i insert it into a FormData

formData.append('file', archivo);

After send formData to controller with Ajax:

public function setIncidenciaPost(Request $request){


    $uploadedFile = "";
    $filename = "";


    // bloque para adjuntar fichero al email al abrirIncidencia


    if($request->file('file') != ""){

        $uploadedFile = $request->file('file');
        $destino = public_path().'/subidas';

        for($i = 0; $i < count($uploadedFile); $i++){
            $filename = $uploadedFile[$i]->getClientOriginalName();

            $uploadedFile[$i]->move($destino, $filename);
        }


        
    }





    $resultado = DB::table('incidencias')->insert([
                                                     'fecha_solicitud' => $request["fechaSolicitud"],
                                                     'fecha_respuesta' => $request["fechaRespuesta"],
                                                           'categoria' => $request["categoria"],
                                                           'asignadoA' => $request["tecnico"],
                                                         'solicitante' => $request["solicitante"],
                                                           'prioridad' => $request["prioridad"],
                                                              'estado' => "pendiente",
                                                              'asunto' => $request["asunto"],
                                                              'cuerpo' => $request["mensaje"],
                                                             'cliente' => $request["cliente"],
                                                             'adjunto' => $filename
                                                    ]);

    $idIncidencia = DB::getPdo()->lastInsertId();

    // ENVIA EMAIL A LOS TÉCNICOS CUANDO SE GENERA LA INCIDENCIA
    $this->enviarEmail($request);

}

When i do var_dump($filename) i can show only one file. If i do var_dump($uploadedFile)

web browser console show this:

 array(1) {
 [0]=>
  object(IlluminateHttpUploadedFile)#248 (7) {
    ["test":"SymfonyComponentHttpFoundationFileUploadedFile":private]=>
    bool(false)
    ["originalName":"SymfonyComponentHttpFoundationFileUploadedFile":private]=>
    string(11) "Captura.PNG"
    ["mimeType":"SymfonyComponentHttpFoundationFileUploadedFile":private]=>
    string(9) "image/png"
    ["error":"SymfonyComponentHttpFoundationFileUploadedFile":private]=>
    int(0)
    ["hashName":protected]=>
    NULL
    ["pathName":"SplFileInfo":private]=>
    string(24) "C:xampptmpphpB785.tmp"
    ["fileName":"SplFileInfo":private]=>
    string(11) "phpB785.tmp"
  }
}

only one file. If in jquery remove index [0] in web broser console show this:

    array(1) {
  [0]=>
  object(IlluminateHttpUploadedFile)#248 (7) {
    ["test":"SymfonyComponentHttpFoundationFileUploadedFile":private]=>
    bool(false)
    ["originalName":"SymfonyComponentHttpFoundationFileUploadedFile":private]=>
    string(11) "Captura.PNG"
    ["mimeType":"SymfonyComponentHttpFoundationFileUploadedFile":private]=>
    string(9) "image/png"
    ["error":"SymfonyComponentHttpFoundationFileUploadedFile":private]=>
    int(0)
    ["hashName":protected]=>
    NULL
    ["pathName":"SplFileInfo":private]=>
    string(24) "C:xampptmpphp2397.tmp"
    ["fileName":"SplFileInfo":private]=>
    string(11) "php2397.tmp"
  }
}

i don´t know that i´m doing wrong… thanks for help and sorry for my english

after responses i trayed it:

formData.append('file[]',  document.getElementById('fileToUpload').files[0]);

with this result:

array(1) {
  [0]=>
  object(IlluminateHttpUploadedFile)#261 (7) {
    ["test":"SymfonyComponentHttpFoundationFileUploadedFile":private]=>
    bool(false)
    ["originalName":"SymfonyComponentHttpFoundationFileUploadedFile":private]=>
    string(11) "Captura.PNG"
    ["mimeType":"SymfonyComponentHttpFoundationFileUploadedFile":private]=>
    string(9) "image/png"
    ["error":"SymfonyComponentHttpFoundationFileUploadedFile":private]=>
    int(0)
    ["hashName":protected]=>
    NULL
    ["pathName":"SplFileInfo":private]=>
    string(24) "C:xampptmpphp3A08.tmp"
    ["fileName":"SplFileInfo":private]=>
    string(11) "php3A08.tmp"
  }
}

i´m traying select two img but only i can see one

UPDATE

php controller

public function setIncidenciaPost(Request $request){


    $uploadedFile = "";
    $filename = "";


    // bloque para adjuntar fichero al email al abrirIncidencia


    if($request->file('file') != ""){

        $uploadedFile = $request->file('file');
        $destino = public_path().'/subidas';

        for($i = 0; $i < count($uploadedFile); $i++){
            $filename = $uploadedFile[$i]->getClientOriginalName();

            $uploadedFile[$i]->move($destino, $filename);
        }


        
    }





    $resultado = DB::table('incidencias')->insert([
                                                     'fecha_solicitud' => $request["fechaSolicitud"],
                                                     'fecha_respuesta' => $request["fechaRespuesta"],
                                                           'categoria' => $request["categoria"],
                                                           'asignadoA' => $request["tecnico"],
                                                         'solicitante' => $request["solicitante"],
                                                           'prioridad' => $request["prioridad"],
                                                              'estado' => "pendiente",
                                                              'asunto' => $request["asunto"],
                                                              'cuerpo' => $request["mensaje"],
                                                             'cliente' => $request["cliente"],
                                                             'adjunto' => $filename
                                                    ]);

    $idIncidencia = DB::getPdo()->lastInsertId();

    // ENVIA EMAIL A LOS TÉCNICOS CUANDO SE GENERA LA INCIDENCIA
    $this->enviarEmail($request);

}

SCRIPT JS that send files to controller:

if(contador == 1){

    /*
    * Tenemos que crear un formData, para enviar el archivo adjunto
    * Una vez creado, debemos añadirle todos los campos del formulario
    * Así los recibiremos en el controlador.
    */

    var fechaSolicitud = $("#fechaSolicitud").val();
    var categoria = $("#categoria").val();
    var prioridad = $("#Abrirprioridad").val();
    var telefono = $("#telefonoContacto").val();
    var asunto = $("#asunto").val();
    var mensaje = $("#cuerpoMensaje").val();
    var token = $("#token").val();
    var archivo = $("#adjunto").prop('files')[0];
    var nombreArchivo = $("#adjunto").val();
    var formData = new FormData();

    formData.append('file[]', archivo);
    formData.append('fechaSolicitud', fechaSolicitud);
    formData.append('categoria', categoria);
    formData.append('prioridad', prioridad);
    formData.append('asunto', asunto);
    formData.append('mensaje', mensaje);
    formData.append('solicitante', codigoSolicitante);
    formData.append('cliente', codigoCliente);
    formData.append('tecnico', tecnicoSeleccionado);
    formData.append('telefono', telefono);

    $.ajax({
        url: "/setIncidencia",
        type: "POST",
        headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
        contentType: false,
        processData: false,   
        cache: false, 
        data: formData,
        success: function(data){
            $("#correcto").show();
            $("#correcto").append("Incidencia Generada");

            //UNA VEZ CREADA LA INCIDENCIA ENVIAMOS EL EMAIL DESDE EL CONTROLADOR Y REDIRECCIONAMOS A:
            window.location.href = "/home";
        },
        error: function(xhr){
            var data = xhr.responseJSON;
            console.log("Error: "+xhr.status);
            $("#error").show();
            $("#error").append("Ha ocurrido un error al crear la incidencia -> Código de Error: " + xhr.status);
        }
    }); 

}// fin if

Advertisement

Answer

My solution is:

if(contador == 1){

        /*
        * Tenemos que crear un formData, para enviar el archivo adjunto
        * Una vez creado, debemos añadirle todos los campos del formulario
        * Así los recibiremos en el controlador.
        */

        var fechaSolicitud = $("#fechaSolicitud").val();
        var categoria = $("#categoria").val();
        var prioridad = $("#Abrirprioridad").val();
        var telefono = $("#telefonoContacto").val();
        var asunto = $("#asunto").val();
        var mensaje = $("#cuerpoMensaje").val();
        var token = $("#token").val();
        var archivo =  $("#adjunto").prop('files');
        var datosFormulario = new FormData();



        for(let i=0; i < document.getElementById('adjunto').files.length; i++){
            datosFormulario.append('adjunto[]', document.getElementById('adjunto').files[i]);
        }


        datosFormulario.append('fechaSolicitud', fechaSolicitud);
        datosFormulario.append('categoria', categoria);
        datosFormulario.append('prioridad', prioridad);
        datosFormulario.append('asunto', asunto);
        datosFormulario.append('mensaje', mensaje);
        datosFormulario.append('solicitante', codigoSolicitante);
        datosFormulario.append('cliente', codigoCliente);
        datosFormulario.append('tecnico', tecnicoSeleccionado);
        datosFormulario.append('telefono', telefono);



        $.ajax({
            url: "/setIncidencia",
            type: "POST",
            headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
            contentType: false,
            processData: false,   
            cache: false, 
            data: datosFormulario,
            success: function(data){
                $("#correcto").show();
                $("#correcto").append("Incidencia Generada");

                //UNA VEZ CREADA LA INCIDENCIA ENVIAMOS EL EMAIL DESDE EL CONTROLADOR Y REDIRECCIONAMOS A:
                window.location.href = "/home";
            },
            error: function(xhr){
                var data = xhr.responseJSON;
                console.log("Error: "+xhr.status);
                $("#error").show();
                $("#error").append("Ha ocurrido un error al crear la incidencia -> Código de Error: " + xhr.status);
            }
        }); 

    }// fin if

and in controller:

$nombreArchivo = array();
        $destino = public_path().'/subidas';


        // bloque para subir fichero/s a la carpeta subida en public y posterior envio de email

        if($request->file('adjunto') != ""){

            for( $i=0; $i<count($request->file('adjunto')); $i++ ){
                $nombreArchivo[] = $request->file('adjunto')[$i]->getClientOriginalName();
                


                $request->file('adjunto')[$i]->move($destino, $request->file('adjunto')[$i]->getClientOriginalName());
            }
        }
        //fin bloque


        $resultado = DB::table('incidencias')->insert([
                                                         'fecha_solicitud' => $request["fechaSolicitud"],
                                                         'fecha_respuesta' => $request["fechaRespuesta"],
                                                               'categoria' => $request["categoria"],
                                                               'asignadoA' => $request["tecnico"],
                                                             'solicitante' => $request["solicitante"],
                                                               'prioridad' => $request["prioridad"],
                                                                  'estado' => "pendiente",
                                                                  'asunto' => $request["asunto"],
                                                                  'cuerpo' => $request["mensaje"],
                                                                 'cliente' => $request["cliente"],
                                                                 'adjunto' => implode(',', $nombreArchivo),
                                                        ]);

        $idIncidencia = DB::getPdo()->lastInsertId();

        // ENVIA EMAIL A LOS TÉCNICOS CUANDO SE GENERA LA INCIDENCIA
        $this->enviarEmail($request);

    }
User contributions licensed under: CC BY-SA
1 People found this is helpful
Advertisement