我的任务很(或者更好,应该是)简单:从 Node 应用程序获取 SFTP 目录的内容,然后下载其中的所有文件,最后远程删除它们。
现在,我检查了不同的模块。在我看来,非常干净的是 ssh2-sftp-client。我可以这样使用它:
let Client = require('ssh2-sftp-client');
let sftp = new Client();
sftp.connect({
host: myhost,
port: '22',
username: myusername,
password: mypassword
}).then(() => {
return sftp.list('/path/to/my/files');
}).then((data) => {
for(var i = 0 ; i < data.length; i++) {
sftp.get('/path/to/my/files/'+data[i].name);
}
}).catch((err) => {
console.log(err, 'catch error');
});
我可以列出所有文件并在控制台中查看生成的 jSon,但是 .get 命令似乎什么都不做,我不知道哪里出了问题。从文档 ( https://www.npmjs.com/package/ssh2-sftp-client ) 中,您可以像我一样简单地获取文件。但是:
1) 好像不行 2)我怎样才能调试发生了什么? 3) 如果我没有机会选择本地目录,这些文件很可能会被下载到 node 启动 js 的地方,对吗?
那么,如果使用此模块(或其他模块,如果有的话)成功下载文件,我如何获取实际下载并可能被远程删除的文件?
谢谢, 法比奥
最佳答案
sftp.get()
返回返回流的 Promise,因此如果您想将流保存到磁盘,则需要通过管道传输它。例如:
var fs = require('fs');
// ...
for(var i = 0; i < data.length; i++) {
const remoteFilename = '/path/to/remote/files/' + data[i].name;
const localFilename = '/path/to/local/files/' + data[i].name;
sftp.get(remoteFilename).then((stream) => {
stream.pipe(fs.createWriteStream(localFilename));
});
}
此外,ssh2-sftp-client
似乎没有使用 ssh2
模块的最新版本分支(撰写本文时为 v0.5.x),因此,如果您遇到问题,请记住这一点。
关于node.js - Node 中用于下载和删除文件的 SFTP 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41648624/