Ошибка загрузки файла в easy-ftp с electron

#javascript #node.js #ftp #electron

#javascript #node.js #ftp #electron

Вопрос:

Я пытаюсь загрузить CSV-файлы на удаленный ftp, используя пакет easy-ftp, но иногда загружает и иногда показывает ошибку, подобную изображению ниже

введите описание изображения здесь

вот мой код

 let ftp = new EasyFtp();
try{
    const config = {
        host: 'ftp.saba.com',
        port: 21,
        username: 'username',
        password: 'password',
        type : 'ftp'
    };
    ftp.connect(config);
    ftp.upload(csvName, "/csvs/", function (err) {
        try {
            fs.unlink(csvName, (err) => {
                if (err) {
                    console.log(err);
                    return;
                }
            });
        } catch(error) {
            console.log(error);
        }
    });
} catch(error) {
    console.log(error);
}
  

Я не могу найти никаких полезных ресурсов для решения этой проблемы, что я могу сделать сейчас?

Спасибо

Комментарии:

1. csvName не определено, пожалуйста, консоль / отладьте это значение

2. @MuhammadAli вот значение c:UsersLENOVODownloadsgstgst/csvs/data_20190423_28ab5ac9-b72f-4138-b06c-70f2d53874fd.csv

3. просто задайте путь к вашему файлу внутри вашего проекта, косая черта каталога окна отличается в Linux, например ‘csvs/data_20190423_28ab5ac9-b72f-4138-b06c-70f2d53874fd.csv’

Ответ №1:

Это асинхронная проблема. Вам необходимо загрузить файл после успешного подключения.

Код должен быть:

 ftp.on('open', function(){
  ftp.upload(csvName, "/csvs/", function (err) {
    // process upload result
  });
});

ftp.connect(config);
  

В вашем коде upload запрос отправляется сразу после connect операции. Если повезет, когда easy-ftp попытается выполнить upload операцию, предыдущая connect уже завершена и выполнена успешно, тогда upload тоже будет успешной.

Если не повезло, когда easy-ftp попытается выполнить upload операцию, предыдущая connect все еще не завершена. Затем upload произойдет сбой и отобразится ошибка «Не удается прочитать свойство …» (похоже, что easy-ftp должен отображать сообщение об ошибке получше).

Чтобы решить проблему, вам необходимо прослушать событие «открыть» в easy-ftp и загружать файлы только после того, как это событие было отправлено:

открыть (клиент<FTPClient >) — выдается при успешном подключении и аутентификации.

Комментарии:

1. Я исправил использование вашей концепции, но не точно кода. Спасибо

2. Добро пожаловать, @jesica, пока upload вызывается после open события, код исправен.