gpt4 book ai didi

node.js - fs.createReadStream 和 .pipe()

转载 作者:搜寻专家 更新时间:2023-10-31 23:09:41 24 4
gpt4 key购买 nike

我正在尝试使用 Node.js 中请求包的 request.post() 将一个大文件发布到另一台服务器,我得到:

(node) warning: Recursive process.nextTick detected. This will break in the next version    of node. Please use setImmediate for recursive deferral.

RangeError: Maximum call stack size exceeded

我认为这是因为它是一个大文件(80MB),因为较小的文件可以正常工作,所以我现在正在尝试实现一个流:

var options = {
url: aURLIHaveDefined,
headers: {
'User-Agent': 'MyRestAPI'
},
auth: {
username: creds.username,
password: creds.password
},
strictSSL: false,
json: true
}

var readStream = fs.createReadStream(filePathIHaveDefined);

readStream.pipe(options);

我得到了错误:

TypeError: Object #<Object> has no method 'on'

有谁知道在管道中包含选项的语法以及为什么我会收到此错误?

更新(在苏萨评论之后):我试过:

readStream.pipe(request(options));
readStream.on('end', function() {
console.log('end of readStream'+fileName);
});

它没有出错,但它现在似乎也没有做任何事情。程序刚刚执行,我从未看到 console.log()

更新#2:

使用帮助手册here ,发现你可以这样做:

fs.createReadStream('file.json').pipe(request.put('http://....'))

所以我在管道中添加了 request.post() ,看起来我快到了!使用:

readStream.pipe(
request.post(options,
function(error, response, data) {

if (error) {
console.log(": Cannot upload file to " + creds.server + " due to " + error);
setImmediate(failureCallback(error));
} else {
console.log(": file uploaded to " + data);
// send back data, which is url of uploaded file
setImmediate( successCallback(data) );
}
}
)
);

我收到一条错误消息,提示需要知道长度:

Apache Tomcat/5.5.17 - Error report HTTP Status 411 - Length Required his request cannot be handled without a defined content length (Length Required).

最佳答案

选项 var 需要是一个流。你必须做这样的事情:

readStream.pipe(request(options))

你正在管道化到一个对象,这就是你没有方法 on 的原因。

关于node.js - fs.createReadStream 和 .pipe(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21935672/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com