Estoy tratando de crear un programa de descarga de archivos como un servicio en segundo plano, pero cuando se programa un archivo grande, primero se guarda en la memoria y luego, al final de la descarga el archivo se escribe en el disco.Descargar archivo grande con node.js evitando el alto consumo de memoria
¿Cómo puedo hacer que el archivo se escriba gradualmente en el disco conservando la memoria teniendo en cuenta que puedo tener muchos archivos que se descargan al mismo tiempo?
Aquí está el código de `m usando:
var sys = require("sys"),
http = require("http"),
url = require("url"),
path = require("path"),
fs = require("fs"),
events = require("events");
var downloadfile = "http://nodejs.org/dist/node-v0.2.6.tar.gz";
var host = url.parse(downloadfile).hostname
var filename = url.parse(downloadfile).pathname.split("/").pop()
var theurl = http.createClient(80, host);
var requestUrl = downloadfile;
sys.puts("Downloading file: " + filename);
sys.puts("Before download request");
var request = theurl.request('GET', requestUrl, {"host": host});
request.end();
var dlprogress = 0;
setInterval(function() {
sys.puts("Download progress: " + dlprogress + " bytes");
}, 1000);
request.addListener('response', function (response) {
response.setEncoding('binary')
sys.puts("File size: " + response.headers['content-length'] + " bytes.")
var body = '';
response.addListener('data', function (chunk) {
dlprogress += chunk.length;
body += chunk;
});
response.addListener("end", function() {
fs.writeFileSync(filename, body, 'binary');
sys.puts("After download finished");
});
});
alguna posibilidad de que podría compartir el resultado final ? Estoy buscando algo como esto ... – Eli
Intenté implementar una característica para seguir los redireccionamientos 302 pero no creo que esté funcionando correctamente. Tal vez podrías intentarlo. Ahí está: https://gist.github.com/1297063 – Carlosedp