我的任务很简单(或者更好):从Node应用程序中获取SFTP中目录的内容,然后下载其中的所有文件,最后远程删除它们。
现在,我检查了不同的模块。很干净,在我看来,是ssh2-sftp客户端。我可以这样用它:
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)如果我没有机会选择本地目录,这些文件很可能是在节点启动js的地方下载的吗?
那么,如果这些文件是通过这个模块成功下载的(如果有的话),如何才能真正下载并可能远程删除这些文件呢?
谢谢,法比奥
发布于 2017-01-14 10:11:42
sftp.get()返回返回流的承诺,因此如果您想将流保存到磁盘中,则需要将其传输。例如:
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模块的最新版本分支(在撰写本文时,版本分支是0.5.x),因此,如果遇到问题,请记住这一点。
发布于 2017-07-02 22:47:05
sftp.get(remoteFileNameWithPath, true).then(stream => {
stream.pipe(fs.createWriteStream(localFilePath)).on('close', () => console.log('completely passed file'))
})get方法返回流结果的承诺,因此,为了保存它,您需要管道到nodejs:https://nodejs.org/api/stream.html上的一个https://nodejs.org/api/stream.html检查文档。
发布于 2019-07-16 08:37:50
使用get()方法下载和保存文件
sftp.get(remote_file_path, local_file_path).then((stream) => {
console.log('File download Success')
});
它需要两个param: src和dest文件路径。
https://stackoverflow.com/questions/41648624
复制相似问题