gpt4 book ai didi

node.js - Node 中用于下载和删除文件的 SFTP 模块

转载 作者:搜寻专家 更新时间:2023-11-01 00:29:40 26 4
gpt4 key购买 nike

我的任务很(或者更好,应该是)简单:从 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com