【发布时间】:2011-06-13 21:13:59
【问题描述】:
我正在尝试创建一个文件下载器作为后台服务,但是当安排一个大文件时,它首先被放入内存,然后在下载结束时将文件写入磁盘。
考虑到我可能同时下载大量文件,如何将文件逐渐写入磁盘保留内存?
这是我正在使用的代码:
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");
});
});
【问题讨论】:
-
您有机会分享最终结果吗?我正在寻找这样的东西......
-
我尝试实现一个功能来跟踪 302 重定向,但我认为它不能正常工作。也许你可以试试。它是:gist.github.com/1297063
标签: javascript node.js