Saltar al contenido

Node.js y Request: limitando el tamaño del archivo del archivo descargado

Nuestro team redactor ha pasado mucho tiempo buscando para darle resolución a tus interrogantes, te regalamos la solución por esto esperamos serte de gran ayuda.

Solución:

De hecho, usaría los dos métodos que ha discutido: verifique el content-legnth encabezado y observe el flujo de datos para asegurarse de que no exceda su límite.

Para hacer esto, primero haría un HEAD solicitud a la URL para ver si el content-length el encabezado está disponible. Si es más grande que su límite, puede detenerse allí mismo. Si no existe o es más pequeño que su límite, haga el real GET petición. Desde un HEAD la solicitud solo devolverá los encabezados y no el contenido real, esto ayudará a eliminar archivos grandes con válidos content-lengthrápido.

A continuación, haga el verdadero GET solicite y observe el tamaño de sus datos entrantes para asegurarse de que no exceda su límite (esto se puede hacer con el módulo de solicitud; vea a continuación). Querrá hacer esto independientemente de si el HEAD la solicitud encontró un content-length encabezado, como una verificación de cordura (el servidor podría estar mintiendo sobre el content-length).

Algo como esto:

var maxSize = 10485760;

request(
    url: url,
    method: "HEAD"
, function(err, headRes) 
    var size = headRes.headers['content-length'];
    if (size > maxSize) 
        console.log('Resource size exceeds limit (' + size + ')');
     else 
        var file = fs.createWriteStream(filename),
            size = 0;

        var res = request( url: url );

        res.on('data', function(data) 
            size += data.length;

            if (size > maxSize) 
                console.log('Resource stream exceeded limit (' + size + ')');

                res.abort(); // Abort the response (close and cleanup the stream)
                fs.unlink(filename); // Delete the file we were downloading the data to
            
        ).pipe(file);
    
);

El truco para ver el tamaño de los datos entrantes usando el módulo de solicitud es enlazar con el data evento en la respuesta (como si estuvieras pensando en hacer usando el http module) antes de comenzar a canalizarlo a su flujo de archivos. Si el tamaño de los datos supera el tamaño máximo de archivo, llame a la respuesta abort() método.

Sección de Reseñas y Valoraciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *