Estoy usando reaccionar en el frontend y express en el backend.
Aquí está mi código que uso para cargar archivos:
const formData = new FormData(); formData.append('file', blob); formData.append('title', videoName); const request = new XMLHttpRequest(); request.open('POST', `${process.env.URL}/api/video`); request.withCredentials = true; request.setRequestHeader('lang', router.locale as string) request.upload.onprogress = e => { setUploadProgress(Math.floor((e.loaded / e.total) * 100)); }; request.onload = () => { const resp = JSON.parse(request.response); setRequestErr({ mess: resp.message, code: resp.statusCode }) resp.statusCode === 401 && logoutUser() setIsVideoBeingSent(false); setModalType('info') if(resp.status === 200){ setModalInfoType('success') } else{ setModalInfoType('fail') } }; request.send(formData);Funciona perfectamente localmente, tanto en archivos más pequeños como más grandes (hasta 150 mb).
El problema ocurre cuando intento subir el archivo a un servidor alojado en amazon. El archivo de 150 mb se detiene en alrededor del 25 por ciento y no se mueve más.
Estoy usando express-fileupload con configuraciones:
const fileUpload = require('express-fileupload'); let Options = { limits: { fileSize: 200 * 1024 * 1024 }, useTempFiles: true, abortOnLimit: true, tempFileDir: './content/tmp/', uploadTimeout: 0, debug: true, } router.post("/", TokenVerify, fileUpload(Options), UploadVideo);La consola en el servidor no muestra nada, ni errores ni otros mensajes. La consola en el navegador solo devuelve:
POST /api/video net::ERR_CONNECTION_ABORTED¿Cuál podría ser la causa de esto?
Si está usando una máquina virtual o un servicio que usa uno en su servidor de Amazon, entonces es probable que esté usando Apache o Nginx para enviar su tráfico en el puerto 80 a su aplicación. Lo que significa que las configuraciones de su servidor express en lo que respecta a los límites de carga de archivos no importan en absoluto, pero la que está en el servidor http que está utilizando, por lo que si es Nginx: establezca la directiva client_max_body_size en su límite deseado, por ejemplo, client_max_body_size 100; Esto se puede hacer como se explica en esta respuesta
Y en cuanto a apache, esto debería ayudarlo: la configuración del límite de carga de archivos de apache
Sin embargo, si no tiene acceso ssh a su entorno de producción, entonces debería haber un archivo de configuración del servidor que pueda usar para editar los límites. O algunas configuraciones de interfaz gráfica de usuario que puede editar.
El punto más importante aquí es que establezca su límite de carga tanto en su servidor express como en el servidor http que enruta las solicitudes de sus clientes.