#node.js
#node.js
Вопрос:
Я считываю содержимое файла из каталога и загружаю через SFTP. По какой-то причине файлы не загружаются без ошибок. Я не могу отладить, почему файлы не отображаются на FTP.
Есть мысли, как устранить проблему?
Я пытался использовать методы SFTP.put amp;amp; SFTP.Fastput, но безуспешно
const fs = require('fs');
var Client = require('ssh2-sftp-client');
var sftp = new Client();
const filePath = "/Users/NodeJSWorkspace/helloworld/cvs/";
var fileNames = [];
fs.readdirSync(filePath).forEach(file => {
console.log(file);
fileNames.push(file);
});
sftp.connect({
host: '10.7.10.10',
port: '22',
username: 'test',
password: 'test',
}).then(() => {
return sftp.list(filePath);
}).then((data) => {
console.log("Length :",fileNames.length);
for(let i = 0; i < fileNames.length; i ) {
let filename = fileNames[i];
let remoteFilename = '/ftp/' filename;
let localFilename = filePath filename;
sftp.fastPut(localFilename,remoteFilename,function(err) {
if (err)
console.log("ERR ******: " err);
});
}
sftp.end();
}).catch((err) => {
console.log(err, 'catch error');
sftp.end();
});
Ответ №1:
Я подозреваю, что проблема в вашей последней функции обратного вызова «then», где у вас есть цикл «for», в котором вы вызываете «sftp.fastPut», но сразу после этого цикла вы вызываете «sftp.end()». Вызовы «sftp.fastPut» являются асинхронными, и обычно «end» или «close» отменяют все ожидающие асинхронные операции без обязательного запуска обратного вызова с ошибкой. Вам нужно будет использовать цепочку обещаний или какой-либо другой асинхронный шаблон.
Обратите внимание, что я раньше не использовал «ssh2-sftp-client», поэтому я не уверен на 100%. Я основываю свой ответ на опыте работы с аналогичными модулями узла.
Комментарии:
1. Это сработало. Спасибо. Можете ли вы поделиться фрагментами по этому поводу? «Вам нужно будет использовать цепочку обещаний или какой-то другой асинхронный шаблон».