Mam metodę pobierania pliku z serwera FTP i działa dobrze na mniejszych plikach, ale kiedy używam go do pobrania pliku ~ 5GB rozmiar typu zip, to go pobiera, ale potem nic nie robi. Kiedy osiągnie 100% pobierania, skrypt nie będzie kontynuowany. Czy powinienem poczekać, czy faktycznie robi się coś w tle po zakończeniu pobierania? Czy istnieje limit rozmiaru pliku?Węzeł FTP nie wykonuje komendy `once ('close')`, gdy pobieranie pliku jest duże
const FTP = require('ftp')
które można znaleźć na 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)
})
}
Zasadniczo zwrotna dla stream.once('close', ...)
nie zostanie wykonane, gdy duży plik zostanie pobrany. I zostanie wykonany dla mniejszego pliku tego samego typu.
Jak to jest kod inny niż ten, który napisałem z wyjątkiem przypisany 'fs.createWriteStream (params.localDir)' 'writeStream' do const? – Kunok
zaktualizowałeś moją odpowiedź, powinieneś przeczytać o strumieniach odczytu i zapisu oraz 'strumieniu strumienia nodejs vs zamknij' – num8er
Och, widzę różnicę teraz. Zmodyfikowałem kod, uruchomiłem go z powodzeniem na małym pliku. Teraz mam zamiar przetestować go na dużym pliku, odpowiem z wynikiem. – Kunok