Buenos Dias, tengo el siguiente problema, tengo una funcion en JavaScript que se encarga de manipular el HTML,
Este codigo es el javascript principal :
document.addEventListener("DOMContentLoaded",() =>{
let form = document.getElementById('form_subir');
form.addEventListener("submit", function (event){
event.preventDefault();
envioparametro();
subir_archivos(this);
});
});
function subir_archivos(form) {
let barra_estado = form.children[1].children[0],
span = barra_estado.children[0],
boton_cancelar = form.children[2].children[1];
barra_estado.classList.remove('barra_verde', 'barra_roja');
//Petición
let peticion = new XMLHttpRequest();
//Progreso
peticion.upload.addEventListener("progress",(event) =>{
let porcentaje = Math.round((event.loaded / event.total) * 100);
console.log(porcentaje);
barra_estado.style.width = porcentaje+'%';
span.innerHTML = porcentaje+'%';
});
//Finalizado
peticion.addEventListener("load",() => {
barra_estado.classList.add('barra_verde');
span.innerHTML = "Proceso Completado";
});
//Enviar datos
peticion.open('post','subir.php');
peticion.send(new FormData(form));
console.log (JSON.stringify({"Extension":"pdf,PDF","Tamanio":1024})); // Si lo muestra en la consola
//Cancelar
boton_cancelar.addEventListener("click", () => {
peticion.abort();
barra_estado.classList.remove('barra_verde');
barra_estado.classList.add('barra_roja');
span.innerHTML = "Proceso Cancelado";
});
}
Este llama a subir.php
En subir PHP con estas lineas realiza su accion correctamente sube el archivo a la carpeta indicada.
$archivo_nombre = $_FILES['archivo']['name'];
$archivo_tamanio = $_FILES['archivo']['size'];
$archivo_tipo = $_FILES['archivo']['type'];
$archivo_nombre_temporal = $_FILES['archivo']['tmp_name'];
$array = explode(".", $archivo_nombre);
$archivo_extension = end($array);
$cambiar_nombre=null;
$cambiar_nombre = sha1("ArchivoNuevo" . rand(0, 10000000));
$archivo_nombre = $cambiar_nombre.".".$archivo_extension;
$archivo_nombre = preg_replace('/ /', '_', $archivo_nombre);
$archivo_nombre = preg_replace('/%20/', '_', $archivo_nombre);
$archivo_nombre = preg_replace('/:/', '_', $archivo_nombre);
//$nombre_temporal = $_FILES['archivo']['tmp_name'];
//$nombre = $_FILES['archivo']['name'];
move_uploaded_file($archivo_nombre_temporal,'archivos/tmp/'.$archivo_nombre);
ahora lo que requiero es validar la extension del archivo asi como su tamaño y en caso de que no se cumpla pues que no lo suba al servidor.
Probe ya de distintas maneras hice un par de funciones si envia los parametros esta es una de las funciones que he estado utilizando:
function envioparametro() {
var fData = new FormData();
//fData.open('post','subir.php');
fData.append("Extenso","pdf,PDF"); <<--tipo de extension
fData.append("Tamano", 2014); <<--Tamaño del archivo
$.ajax({
url : 'subirArchivo.php',
type: 'POST',
data: fData,
processData: false,
contentType: false,
//dataType: "json",
success: function (data) {
alert(data);
}
});
}
, al momento de recibir el POST en subir.php me tira los $_FILES., no importa la forma, si va en json, utilizando (JSON.stringify({"Extension":"pdf,PDF","Tamanio":1024}));
esta linea la añadi al javascript que se muestra inicialmente console.log (JSON.stringify({"Extension":"pdf,PDF","Tamanio":1024})); y muestra de manera satisfactoria los datos al igual que lo que llega desde FormData al revisar en NETWORK , las cabeceras , y demas.
Quizas este cometiendo un error al tratar de pasar los parametros asi, pero no he encontrado como hacerlo de otra manera hasta el momento. La otra idea que me esta rondando es que no puedo primero enviar los parametros y luego enviar el archivo, quizas sea un tema de que deban llegar al mismo tiempo para que sean procesados a la par por subir.php
Gracias por su atencion
Saludos