используя ftp в node.js я не могу отменить загрузку большого файла - PullRequest
0 голосов
/ 18 июня 2020

Я делаю приложение 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 ();   
}

С этим теперь останови все немедленно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...