tan side seguro que noticias node funcionar framework descripcion dejo caracteristicas node.js file-upload size express http-request

side - Node.js: cómo limitar el tamaño de la solicitud HTTP y subir el tamaño del archivo?



que es express js (5)

Express usa Connect, que tiene un middleware de límite disponible . Puede usar esto en su aplicación Express haciendo algo como esto:

app.use(express.limit(''2mb''));

Eso, por ejemplo, limitaría todas las solicitudes HTTP a 2 MB. Como los archivos cargados son parte de la solicitud HTTP, cualquier archivo que cargue más de 2 MB también se cancelará.

NOTA: Este middleware está en desuso y pronto será eliminado. La discusión sobre por qué este es el caso está disponible en: https://github.com/senchalabs/connect/pull/925#issuecomment-26990726

Estoy usando Node.js y express.

Me gustaría limitar el tamaño de la solicitud HTTP. Digamos que si alguien me envía una solicitud HTTP de más de 2 MB, detengo la solicitud de inmediato. Miré el código y creo que si cambio el núcleo, puedo hacerlo. Sin embargo, ¿hay alguna forma de establecer un max_request_size o algo así?

Está relacionado con mi segunda pregunta. Estoy usando express para obtener un archivo cargado de archivos de req.files . ¿Hay alguna manera de dejar de escribir el archivo en la carpeta /tmp (que es el comportamiento de carga predeterminado) tan pronto como el tamaño del archivo supera un determinado tamaño de archivo?


Solo una actualización (07-2014), ya que no puedo agregar comentarios:

Como se indicó correctamente anteriormente, las versiones más recientes de Express han dejado de usar el middleware de limit y ahora lo proporcionan como una opción incorporada para el middleware de BodyParser :

var express = require(''express'') var bodyParser = require(''body-parser'') var app = express() app.use(bodyParser.json({ limit: ''5mb'' }))


Use raw-body . La mayoría del middleware (como límite) ya no se incluye con Express y debe instalarse por separado. Aquí hay un ejemplo.

var getRawBody = require(''raw-body'') app.use(function (req, res, next) { getRawBody( stream = req, options = { length: req.headers[''content-length''], limit: ''100mb'', }, callback = function (err, reslt) { if (err) { return next(err) } next(); console.log(req) }) })

  • Recuerde agregar el enrutador después de la aplicación. app.use

Express ya no le permite establecer explícitamente el límite utilizando el middleware agrupado tradicional como se muestra a continuación.

app.use(express.limit(''4M''));


Respuesta para la pregunta 1 :

Para limitar el tamaño de la solicitud HTTP y el tamaño del archivo de carga, debemos establecer el límite del body-parser del body-parser .

app.use(bodyParser.urlencoded({limit: ''50mb'',extended: true})); app.use(bodyParser.json({limit: ''50mb''}));

bodyParser.urlencoded

Los archivos del frente vienen como cuerpos urlencoded.

Devuelve middleware que solo analiza cuerpos urlencoded. Este analizador acepta solo la codificación UTF-8 del cuerpo y admite el inflado automático de gzip y desinfla las codificaciones.

Un objeto cuerpo nuevo que contiene los datos analizados se rellena en el objeto de solicitud después del middleware (es decir, req.body). Este objeto contendrá pares clave-valor, donde el valor puede ser una cadena o matriz (cuando se extiende es falsa), o cualquier tipo (cuando se extiende es verdadera).

bodyParser.json

Devuelve middleware que solo analiza json. Este analizador acepta cualquier codificación Unicode del cuerpo y admite el inflado automático de gzip y desinfla las codificaciones.

Un objeto cuerpo nuevo que contiene los datos analizados se rellena en el objeto de solicitud después del middleware (es decir, req.body).

Nota : Por defecto, el límite de entrada para el analizador corporal es de 100kb

Respuesta para la pregunta 2 :

Para cambiar el directorio de carga predeterminado, podemos usar lo siguiente.

app.set(''uploadDir'', ''./files''); // Sets the upload Directory to files folder in your project.

Otra implementación

Al incluir BodyParser en la aplicación, podemos mencionar el directorio de carga.

app.use(express.bodyParser({uploadDir:''./files'', keepExtensions: true}));

Referencia :

Problemas : https://github.com/expressjs/express/issues/1684

¡Espero que esto ayude!


Código fuente del nodo github:

/* Maximium header size allowed. If the macro is not defined * before including this header then the default is used. To * change the maximum header size, define the macro in the build * environment (e.g. -DHTTP_MAX_HEADER_SIZE=<value>). To remove * the effective limit on the size of the header, define the macro * to a very large number (e.g. -DHTTP_MAX_HEADER_SIZE=0x7fffffff) */ #ifndef HTTP_MAX_HEADER_SIZE # define HTTP_MAX_HEADER_SIZE (80*1024) #endif

Por lo tanto, debe reconstruir el nodo de la fuente para superar el límite de 80 * 1024

Puede usar esto con Express 4 para limitar el tamaño del cuerpo de la solicitud / Cargar tamaño de archivo, en lugar de express.json () y express.urlencoded (), debe requerir el módulo de analizador de cuerpo y usar sus métodos json () y urlencoded () , si la opción extendida no está definida explícitamente para bodyParser.urlencoded (), arrojará una advertencia (body-analizador obsoleto undefined extended: provide extended option).

var bodyParser = require(''body-parser''); app.use(bodyParser.json({limit: ''50mb''})); app.use(bodyParser.urlencoded({limit: ''50mb'', extended: true}));