SFTP Fastput未上传文件内容

时间:2019-04-23 20:55:35

标签: node.js

我正在从目录中读取文件内容,并通过SFTP上传。由于某些原因,文件没有被上传且没有错误抛出。我无法调试为什么文件无法显示在FTP中。

有什么想法如何调试该问题的?

我尝试了SFTP.put和&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 个答案:

答案 0 :(得分:0)

我怀疑问题出在您的最后一个“ then”回调函数中,在该函数中有一个“ for”循环,您在其中调用“ sftp.fastPut”,但是在此循环之后,您立即调用了“ sftp.end()” ”。对“ sftp.fastPut”的调用是异步的,通常“ end”或“ close”将取消所有挂起的异步操作,而不必触发错误回调。您需要使用一个Promise链或其他一些异步模式。

请注意,我之前没有使用过“ ssh2-sftp-client”,所以我不确定100%。我的答案基于类似Node模块的经验。