En este momento estoy tratando de cargar archivos "grandes" en un servidor de alojamiento web. Para esto utilizo un campo de entrada con multiple='multiple'. El tamaño máximo de archivo no está establecido para este campo de entrada. La versión de PHP es 7.4. El hoster establece el tamaño máximo de carga en 256 MB.
Los archivos son procesados por js en un bucle simple (files[x]). El problema es que los archivos de más de 10 MB no obtienen ninguna carga útil al cargarlos. Genero datos de formulario con fragmentos de archivos o archivos completos adjuntos que solo se envían cuando los archivos/fragmentos tienen menos de 10 MB o cuando dejo que los archivos más grandes se corten a través de Javascript en fragmentos de menos de 10 MB. La matriz PHP $_FILES- permanece vacía en archivos de más de 10 MB y los datos del formulario no están disponibles ni se muestran en la carga en las herramientas de desarrollo de Chrome/FF. Las solicitudes se envían a través de jquery $.ajax() después de intentar buscar y jquery $.POST(). Todos muestran el mismo comportamiento. No se muestran errores.
Por el hecho de que puedo cargar archivos de más de 10 MB cuando los divido en cualquier cosa por debajo de 10 MB a través de javascript slice() y cualquier archivo por debajo de 10 MB parece mostrarme que no es un problema de secuencia de comandos. Los archivos de menos de 10 MB también funcionan cuando configuro el tamaño de fragmento en algo así como 100 MB o 200 MB, que está dentro del límite máximo de tamaño de carga.
¿Hay alguna limitación conocida del servidor Apache/nginx que pueda haber pasado por alto?
Editar 27.05.2022 - 21:00 Aquí está el código. Como puede ver, es "nada demasiado elegante":
var chunkSize = 100 * 1024 * 1024; for( var start = 0; start < target.files[ 0 ].size; start += chunkSize ){ var chunk = target.files[ 0 ].slice( start, start + chunkSize );// + 1); var fd = new FormData (); fd.set( 'data', chunk ); await $.ajax({ url : url, type : 'POST', contentType : false, data : fd, cache : false, processData : false //, dataType : 'formData' }) })