#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
события, код исправен.