我正在从目录中读取文件内容,并通过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();
});
答案 0 :(得分:0)
我怀疑问题出在您的最后一个“ then”回调函数中,在该函数中有一个“ for”循环,您在其中调用“ sftp.fastPut”,但是在此循环之后,您立即调用了“ sftp.end()” ”。对“ sftp.fastPut”的调用是异步的,通常“ end”或“ close”将取消所有挂起的异步操作,而不必触发错误回调。您需要使用一个Promise链或其他一些异步模式。
请注意,我之前没有使用过“ ssh2-sftp-client”,所以我不确定100%。我的答案基于类似Node模块的经验。