Hello everyone, I am trying to upload a file, with a form to a folder for later email sending. My problem is that from pure html and php I get it without problems, but I need to capture client IDs in datalist filled with ajax and that cannot be done with PHP, I have to do it with javascript (jquery) therefore I had to take a step back in my development and go back to a previous version where if I inserted without problems in the DB, the problem is capturing the input type file with the name of the file (the path is saved in the DB) I am working with Laravel and using $request- >file('attached') but it always comes back empty... How should I capture the input file to pass it to the controller??
JS:
// función para insertar la incidencia
function insertarIncidencia(codigoCliente){
var fechaSolicitud = $("#fechaSolicitud").val();
var categoria = $("#categoria").val();
var solicitante = $("#idSolicitante").val();
var prioridad = $("#Abrirprioridad").val();
var asunto = $("#asunto").val();
var mensaje = $("#cuerpoMensaje").val();
var adjunto = $("#adjunto").val();
var token = $("#token").val();
$.ajax({
url: '/setIncidencia',
type: 'POST',
data: {
"fechaSolicitud": fechaSolicitud,
"categoria": categoria,
"solicitante": solicitante,
"prioridad": prioridad,
"cliente": codigoCliente,
"asunto": asunto,
"mensaje": mensaje,
"adjunto": adjunto,
"_token": token
},
success:function (data) {
$("#correcto").show();
$("#correcto").append("Incidencia Generada");
console.log(data);
// ENVIAMOS EL ID DE LA ULTIMA INCIDENCIA INSERTADA Y TAMBIÉN
// CUANDO ENVIEMOS EL EMAIL, NOS DEVOLVERÁ A LA PÁGINA DE LAS INCIDENCIAS
//enviarEmailTecnicos(data);
},
error:function(xhr, ajaxOptions, thrownError){
$("#error").append(xhr.status);
console.log(xhr.status);
}
});
}
PHP:
public function setIncidenciaPost(Request $request){
$uploadedFile = "";
$filename = "";
echo "fichero: " . $request['adjunto'];
exit();
if($request->file('adjunto') != ""){
$uploadedFile = $request["adjunto"];
$filename = $uploadedFile->getClientOriginalName();
\Storage::disk('local')->putFileAs(
'subidas/'.$filename,
$uploadedFile,
$filename
);
}else{
echo "viene vacio";
}
$resultado = \DB::table('incidencias')->insert([
'fecha_solicitud' => $request["fechaSolicitudAbrir"],
'fecha_respuesta' => $request["fechaRespuesta"],
'categoria' => $request["categoria"],
'solicitante' => $request["solicitante"],
'prioridad' => $request["prioridad"],
'estado' => "pendiente",
'asunto' => $request["asunto"],
'cuerpo' => $request["mensaje"],
'cliente' => $request["cliente"],
'adjunto' => $request->file('adjunto')
]);
$idIncidencia = \DB::getPdo()->lastInsertId();
// ENVIA EMAIL A LOS TÉCNICOS CUANDO SE GENERA LA INCIDENCIA
//$this->enviarEmail($request);
return \Redirect::to('/mostrarIncidencias');
}
As you can see, there is test code, but neither with file nor with the pure request do I get the file... The request returns the full path... And with File it is always empty...
HTML FORM
<form action="" method="POST" class="mt-5 pl-5 pr-5" id="formularioAlta" enctype="multipart/form-data">
<div class="row offset-md-1">
<div class="form-group">
<label for="fechaSolicitud">Fecha de solicitud</label>
<div class="col-xs-12 pb-5">
<input type="text" name="fechaSolicitudAbrir" id="fechaSolicitud" class="form-control">
</div>
</div>
<div class="form-group pl-5">
<label for="fechaSolicitud">Categoria</label>
<div class="col-xs-12">
<select class="browser-default custom-select" name="categoria" id="categoria">
<option selected>Selecione unca categoria</option>
<option value="Comercial">Comercial</option>
<option value="Técnico">Técnico</option>
</select>
</div>
</div>
</div> <!-- FIN PRIMER ROW -->
<div class="row">
<div class="form-group">
<div class="row">
<div class="col-xs-12 col-md-4">
<label for="fechaSolicitud">Solicitante</label>
<br/>
<!-- ESCRIBIMOS EL NOMBRE DE QUIEN SOLICITA LA INCIDENCIA -->
<input type="text" name="solicitante" id="solicitante" value="{{auth()->user()->nombre}}"/>
<!-- ESCRIBIMOS LA ID DEL USUARIO QUE HA INICIADO LA SESIÓN, PARA HACER OPERACIONES POSTERIORMENTE-->
<input type="hidden" name="idSolicitante" id="idSolicitante" value="{{auth()->user()->cod_usuario}}"/>
</div>
<div class="col-xs-12 col-md-4">
<label for="fechaSolicitud">Prioridad</label>
<div class="col-xs-12">
<select class="browser-default custom-select" id="Abrirprioridad" name="Abrirprioridad">
<option selected>Seleccione una prioridad</option>
<option value="Urgente">Urgente</option>
<option value="Inmediato">Inmediato</option>
<option value="Normal">Normal</option>
</select>
</div>
</div>
<div class="col-xs-12 col-md-4 pb-3">
<div class="col-xs-12">
<label for="cliente">Cliente:</label><br>
<input type="text" list="clientes" id="nombreClienteAbrir" name="cliente"/>
<datalist id="clientes"></datalist>
</div>
</div>
</div>
</div>
</div><!-- FIN SEGUNDO ROW -->
<div class="row">
<div class="col-xs-12 col-md-6">
<label for="asunto">Persona Contacto:</label>
<div class="col-xs-12">
<input type="text" class="form-control" id="nombreContacto" name="nombre">
</div>
</div>
<div class="col-xs-12 col-md-6">
<label for="asunto">Telefono Contacto:</label>
<div class="col-xs-12">
<input type="text" class="form-control" id="telefonoContacto" name="telefono">
</div>
</div>
</div>
<div class="form-group">
<div class="col-xs-12">
<label for="asunto">Asunto</label>
<div class="col-xs-12">
<input type="text" class="form-control" list="asuntosAbrir" name="asunto" id="asunto"/>
<datalist id="asuntosAbrir"></datalist>
</div>
</div>
<div class="col-xs-12">
<label for="mensaje">Mensaje</label>
<textarea class="form-control" rows="5" id="cuerpoMensaje" name="mensaje"></textarea>
</div>
<div class="col-xs-12 mt-3">
<label for="mensaje">Adjunto</label>
<input type="file" name="adjunto" id="adjunto">
</div>
</div>
<!-- input para el token -->
<input type="hidden" name="_token" id="token" value="{{ csrf_token() }}">
<div class="col-xs-12 col-md-4">
<input type="submit" class="btn btn-success" id="enviarIncidencia" value="Enviar incidencia">
</div>
</form>
I appreciate all help.
RESOLVED
Controller:
// FUNCIÓN PARA ABRIR UNA INCIDENCIA
public function setIncidenciaPost(Request $request){
$uploadedFile = "";
$filename = "";
if($request->file('adjunto') != ""){
$uploadedFile = $request->file('adjunto');
$filename = $uploadedFile->getClientOriginalName();
//$subido = \Storage::disk('local')->putFileAs(public_path(), $uploadedFile, $filename);
$destino = 'subidas';
$uploadedFile->move($destino, $uploadedFile->getClientOriginalName());
}else{
echo "archivo vacio";
exit();
}
//consulta para obtener el ID del cliente, a traves del nombre que se eligió en el datalist
$cliente = \DB::table('usuarios')->where("nombre", '=', $request["cliente"])->first();
$resultado = \DB::table('incidencias')->insert([
'fecha_solicitud' => $request["fechaSolicitudAbrir"],
'fecha_respuesta' => $request["fechaRespuesta"],
'categoria' => $request["categoria"],
'solicitante' => $request["idSolicitante"],
'prioridad' => $request["Abrirprioridad"],
'estado' => "pendiente",
'asunto' => $request["asunto"],
'cuerpo' => $request["mensaje"],
'cliente' => $cliente->cod_usuario,
'adjunto' => $filename
]);
$idIncidencia = \DB::getPdo()->lastInsertId();
// ENVIA EMAIL A LOS TÉCNICOS CUANDO SE GENERA LA INCIDENCIA
$this->enviarEmail($request);
return \Redirect::to('/mostrarIncidencias');
JS
// función para insertar la incidencia
function insertarIncidencia(codigoCliente){
var fechaSolicitud = $("#fechaSolicitud").val();
var categoria = $("#categoria").val();
var solicitante = $("#idSolicitante").val();
var prioridad = $("#Abrirprioridad").val();
var asunto = $("#asunto").val();
var mensaje = $("#cuerpoMensaje").val();
var token = $("#token").val();
var adjunto = $('#adjunto').prop('files')[0];
$.ajax({
url: '/setIncidencia',
type: 'POST',
data: {
"fechaSolicitud": fechaSolicitud,
"categoria": categoria,
"solicitante": solicitante,
"prioridad": prioridad,
"codigoCliente": codigoCliente,
"asunto": asunto,
"mensaje": mensaje,
"adjunto": adjunto,
"_token": token
},
success:function (data) {
$("#correcto").show();
$("#correcto").append("Incidencia Generada");
console.log(data);
// ENVIAMOS EL ID DE LA ULTIMA INCIDENCIA INSERTADA Y TAMBIÉN
// CUANDO ENVIEMOS EL EMAIL, NOS DEVOLVERÁ A LA PÁGINA DE LAS INCIDENCIAS
//enviarEmailTecnicos(data);
},
error:function(xhr, ajaxOptions, thrownError){
$("#error").append(xhr.status);
console.log(xhr.status);
}
});
}
Controller: