我想使用Request库下载一个文件。这很简单:
request({
url: url-to-file
}).pipe(fs.createWriteStream(file));
由于URL是由用户提供的(在我的情况下),我希望限制应用程序下载的最大文件大小-比方说是10MB。我可以像这样依赖于content-length
头部:
request({
url: url-to-file
}, function (err, res, body) {
var size = parseInt(res.headers['content-length'], 10);
if (size > 10485760) {
// ooops - file size too large
}
}).pipe(fs.createWriteStream(file));
问题是-这有多可靠?我猜这个回调函数会在文件下载后被调用,对吗?但如果有人提供一个1GB的文件的URL,那么现在为时已晚了。我的应用程序将首先下载此文件的1 GB以检查(在回调中)其是否过大。
我还在考虑Node的http.get()
方法。在这种情况下,我会这样做:
var opts = {
host: host,
port: port,
path: path
};
var file = fs.createWriteStream(fileName),
fileLength = 0;
http.get(opts, function (res) {
res.on('data', function (chunk) {
fileLength += chunk.length;
if (fileLength > 10485760) { // ooops - file size too large
file.end();
return res.end();
}
file.write(chunk);
}).on('end', function () {
file.end();
});
});
你会推荐哪种方法来限制文件的最大下载大小,而不需要在下载完整个文件并检查它的大小后再进行处理?
你会如何限制下载最大文件大小而不实际下载整个文件并检查其大小?
fs
检查文件是否尚未在磁盘上?我想从互联网下载它并确保它不超过10MB。 - Pono