Я делаю приложение JavaScript для node.js, которое загружает файлы по ftp, проблема возникает, когда я пытаюсь отменить загрузку файла, чтобы отключиться от сервера. Когда я использую метод abort (), он не отменяет загрузку, а ожидает завершения sh загрузки файла для отключения. Я не могу сразу прервать загрузку. Я оставляю тебе код
var Client = require('ftp');
var fs = require('fs');
var process = require('process');
let ftp_connection = null
exports.ftp_init = ( data) => {
ftp_connection = new Client();
let up_file = (reg_file)=>{
let uploadedSize = 0;
let uploadfile = fs.createReadStream(reg_file.path);
reg_file.percentage = "0%"
uploadfile.on('data', function(buffer) {
uploadedSize += buffer.length;
process.stdout.write("\u001b[2J\u001b[0;0H");
if(reg_file.size==0){
reg_file.percentage= "100%";
}else{
reg_file.percentage = (uploadedSize/reg_file.size*100).toFixed(0) + "%";
}
console.dir(reg_file);
});
ftp_connection.put(uploadfile, reg_file.file, function(err) {
if (err) throw err;
ftp_connection.end();
});
};
ftp_connection.on('ready', function() {
data.files.forEach((reg_file)=>{
up_file(reg_file);
});
});
ftp_connection.on('close', function() {
console.log("event close:", data.servers.host)
});
ftp_connection.connect(data.servers);
};
exports.ftp_abort = () => {
ftp_connection.abort(function(err) {
if (err) {
console.log("abort error",err)
}
ftp_connection.destroy()
})
}
Я нашел проблему и ее решение
Загрузка файлов не была отменена "Stream" , поэтому я сделал глобальную переменную "uploadfile" и в методе "ftp_abort" добавить:
uploadfile.close();
uploadfile.destroy();
затем в событии 'data' добавить:
if (uploadfile.destroyed) {
this.close ();
}
С этим теперь останови все немедленно