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

标签 node.js sftp

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

相关文章:

node.js - Visual Studio 2013 可以在 Node Js Web 应用程序中调试客户端 JavaScript

node.js - 如何获取 RequestLogger 的 json 响应

windows - grunt "Error: Cannot find module ' ../time/convert'(仅在 Windows 上)

java - 通过 Java 运行时进程连接到 SFTP 服务

deployment - msbuild 的 SFTP 任务?

node.js - Sequelize 不呈现结点(查找表)值

node.js - Docker 在生产中组合

linux - 等效于 ftp 命令提示符和 sftp 中的散列

c# - 从 C# FtpWebRequest FTP 代码更改为 SFTP

python - 尝试使用 Python SFTP 文件时定义传输模式