SFTP Fastput не загружает содержимое файла

#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. Это сработало. Спасибо. Можете ли вы поделиться фрагментами по этому поводу? «Вам нужно будет использовать цепочку обещаний или какой-то другой асинхронный шаблон».