【发布时间】:2017-09-23 23:01:47
【问题描述】:
我有一种从 FTP 服务器下载文件的方法,它适用于较小的文件,但是当我使用它下载约 5GB 大小的 zip 类型的文件时,它会下载它,但在那之后它什么也不做.当它达到 100% 的下载时,脚本不会继续。如果下载完成后它实际上在后台做某事,我应该等待吗?有文件大小限制吗?
const FTP = require('ftp')
可以在npm上找到
downloadFile: params => {
return new Promise((resolve, reject) => {
let ftpClient = new FTP()
let total = params.state.fileSize
let progress = 0
ftpClient.on('ready', _ => {
console.log(`Downloading ${params.targetedFile} ...`);
ftpClient.get(params.targetedFile, (err, stream) => {
if (err) reject(err)
stream.on('data', buffer => {
progress += buffer.length
process.stdout.write(`Progress: ${(progress/total*100).toFixed(2)}% (${progress}/${total}) \r`)
})
stream.once('close', _ => {
ftpClient.end()
console.log(`Saved downloaded file to ${params.localDir}`);
resolve(params.localDir)
})
stream.pipe(fs.createWriteStream(params.localDir))
})
})
ftpClient.connect(params.auth)
})
}
基本上,下载大文件时不会执行stream.once('close', ...) 的回调。它会针对相同类型的较小文件执行。
【问题讨论】:
标签: javascript node.js ftp-client