He buscado durante horas y probado más cosas de las que puedo contar con ambas manos. Pero, esto me está desconcertando.
Estoy tratando de mostrar el progreso de carga al cargar un archivo. Estoy usando el método jQuery ajax para hacer esto mientras agrego un detector de eventos para el progreso. La carga funciona bien y se carga sin ningún problema. Sin embargo, el progreso siempre está en 100 desde el principio. La única excepción a esto es si presiono el botón de carga repetidamente en una sucesión rápida, en cuyo caso parece mostrar un progreso. A veces, este progreso será del 50% y luego del 100% en un segundo en un archivo de 25 MB, por lo que no estoy seguro de que sea un progreso real. Otras veces parece que muestra un progreso real.
También probé un enfoque de JavaScript puro y los resultados son exactamente los mismos.
Cualquier ayuda para ayudar a identificar por qué sucede esto sería muy apreciada.
upload_handler.js
$('#upload_form').submit(function(event){ event.preventDefault(); var form = $('#upload_form')[0]; var fd = new FormData(form); $.ajax({ xhr: function() { var xhr = new window.XMLHttpRequest(); xhr.upload.addEventListener("progress", function(evt) { var percent = (evt.loaded / evt.total) * 100; console.log(percent); }, false); return xhr; }, url: "https://example.com/upload_file.php", method: "POST", data: fd, contentType: false, processData: false, }) .done(function(){ console.log('Done'); }) .fail(function(){ console.log('Fail'); }) .always(function(){ console.log('Always'); }); })Salida de consola
Cuando se envía el formulario, la consola leerá:
100 : esto se muestra inmediatamente cuando se envía el formulario
Listo : esto se muestra un par de segundos después de enviar el formulario
Siempre : se muestra inmediatamente después de Listo .
cargar_archivo.php
<?php $file = $_FILES['file_upload']; $file_dir = __DIR__ . '/test_uploads/'; if( is_dir( $file_dir ) === false ) { mkdir( $file_dir, 0755 ); } $file_path = "{$file_dir}{$file['name']}"; if( move_uploaded_file( $file['tmp_name'], $file_path ) ) { error_log("File uploaded to {$file_path}"); echo 'success'; } else { error_log("Failed to upload file to {$file_path}"); echo 'failed'; }EDITAR