我需要从远程服务器下载一个大文件(例如:从Amazon) 但是我的互联网连接非常差,因此它可以断开连接几秒钟并自动重新连接,但是在这种情况下,下载将冻结,并且无法以编程方式捕获此事件。 我使用的代码与此非常相似:
const request = require('request')
request({
uri: `${pathToRemoteFile}`,
encoding: null
}).on('error', err => console.log(err)) // I suppose that here I will catch all possible errors like internet disconnect, but seems like no
.pipe(fs.createWriteStream(`${pathToStoreFileLocally}`))
.on('finish', () => { console.log('yeah, successfully downloaded') })
.on('error', err => console.log(err))
例如,如果我需要下载500MB的文件,而我已经下载了例如100MB的文件,突然我失去了互联网连接,因此该文件将不再被下载,并且不会出现任何错误。
请帮助
答案 0 :(得分:0)
我找到了适合自己的解决方案。 这是代码,可以帮助我设置如此长的请求超时时间。
const request = require('request')
request({
uri: `${pathToRemoteFile}`,
encoding: null
}).on('error', err => console.log(err))
.on('socket', socket => {
socket.setTimeout(30000);
socket.on('timeout', () => {
//handle disconnect
})
})
.pipe(fs.createWriteStream(`${pathToStoreFileLocally}`))
.on('finish', () => { console.log('yeah, successfully downloaded') })
.on('error', err => console.log(err))
所以我要寻找的部分是:
.on('socket', socket => {
socket.setTimeout(30000);
socket.on('timeout', () => {
//handle disconnect
})
})
在请求流上。 因此,套接字闲置30秒后会引发超时事件