nodejs 请求 - 流式传输响应文件
nodejs request - streaming a response file
在我的 nodejs 应用程序中,我试图读取一个 http 文件 url,然后以流方式下载该文件的内容。
我想做的是:
- 请求文件资源(使用节点请求模块)
- 当响应开始可用时,开始分块读取数据,而不是将文件下载到磁盘..
我了解请求模块确实支持流式传输,并且我已验证以下代码有效:
var request = require('request');
var fileUrl = "http://172.19.2.48:8080/files/1472628282006/valid.txt";
request(fileUrl, function(err, response, body) {})
.on('response', function(response) {
/*
response.on('readable', function() {
console.log("now readable");
var ch;
while ((ch=response.read(1))!== null) {
console.log("char:", ch);
}
});
*/
response.on('data', function(data) {
console.log('data: ', data.toString());
});
});
但唯一的问题是,我无法控制 "reading how much I want to read",因为 'data' 事件提供了当时可用的任何内容。相反,我想做的是自己使用读取操作,如上面代码段中的 commented 代码。
此类代码通常适用于 nodeJS steams 2,但我无法在此处运行。可读事件已触发,但读取操作 return 为空。我的用例是,我要读取某种结构化数据,我将通过使用一些有限状态机一次读取一个字符来解析它。
那么,有没有什么可以阅读,而不是被 'data' 事件通知的?
输出,尝试读取。仅接收到可读事件,后续读取 return null。
rvnath@admin ~/downloader $ node download.js
now readable
编辑
简而言之,我希望能够以 streams2(基于拉流)的方式使用传入的响应流,而不是流 1(基于推流)类型。
问题是,流处于流动模式,因此自动读取所有数据。也许你可以试试这个:
request(fileUrl, function(err, response, body) {})
.on('response', function(response) {
response.pause(); // <-- Pauses stream so you can pull data on demand
response.on('readable', function() {
console.log("now readable");
var ch;
while ((ch=response.read(1))!== null) {
console.log("char:", ch);
}
});
});
在我的 nodejs 应用程序中,我试图读取一个 http 文件 url,然后以流方式下载该文件的内容。
我想做的是: - 请求文件资源(使用节点请求模块) - 当响应开始可用时,开始分块读取数据,而不是将文件下载到磁盘..
我了解请求模块确实支持流式传输,并且我已验证以下代码有效:
var request = require('request');
var fileUrl = "http://172.19.2.48:8080/files/1472628282006/valid.txt";
request(fileUrl, function(err, response, body) {})
.on('response', function(response) {
/*
response.on('readable', function() {
console.log("now readable");
var ch;
while ((ch=response.read(1))!== null) {
console.log("char:", ch);
}
});
*/
response.on('data', function(data) {
console.log('data: ', data.toString());
});
});
但唯一的问题是,我无法控制 "reading how much I want to read",因为 'data' 事件提供了当时可用的任何内容。相反,我想做的是自己使用读取操作,如上面代码段中的 commented 代码。
此类代码通常适用于 nodeJS steams 2,但我无法在此处运行。可读事件已触发,但读取操作 return 为空。我的用例是,我要读取某种结构化数据,我将通过使用一些有限状态机一次读取一个字符来解析它。
那么,有没有什么可以阅读,而不是被 'data' 事件通知的?
输出,尝试读取。仅接收到可读事件,后续读取 return null。
rvnath@admin ~/downloader $ node download.js
now readable
编辑 简而言之,我希望能够以 streams2(基于拉流)的方式使用传入的响应流,而不是流 1(基于推流)类型。
问题是,流处于流动模式,因此自动读取所有数据。也许你可以试试这个:
request(fileUrl, function(err, response, body) {})
.on('response', function(response) {
response.pause(); // <-- Pauses stream so you can pull data on demand
response.on('readable', function() {
console.log("now readable");
var ch;
while ((ch=response.read(1))!== null) {
console.log("char:", ch);
}
});
});