如何使用 ssh2-sftp-client fastGet 下载多个文件?

How to download multiple files with ssh2-sftp-client fastGet?

如何使用fastGet下载多个txt文件?我的代码如下:

const Client = require('ssh2-sftp-client');
const sftp = new Client();

sftp.connect(configs)
    .then(() => {
        return sftp.list('.');
    })
    .then(files => {
        files.forEach(file => {
            if(file.name.match(/txt$/)){
                const remoteFile = // remote file dir path
                const localFile = // local file dir path
                sftp.fastGet(remoteFile, localFile).catch(err => console.log(err));
            }
        });
    })
    .catch(err => console.log(err))
    .finally(() => {
        sftp.end();
    });

我一直收到“没有可用的 sftp 连接”错误。我很确定我在这里使用 sftp.fastGet 做错了一些事情,但不知道从哪里开始。

您的代码中似乎存在多个问题:

  1. loop through 文件应该在第一个 then 块中执行。
  2. sftp.fastGet returns 一个承诺,因此它是一个 asynchronous 操作,在 forEach 循环中执行 asynchronous 操作不是一个好主意.

我建议通过以下更改更新您的代码:

sftp.connect(configs)
    .then(async () => {
        const files = await sftp.list('.');

        for(const file in files){
          if(file.name.match(/txt$/)){
            const remoteFile = // remote file dir path
            const localFile = // local file dir path
            try {
              await sftp.fastGet(remoteFile, localFile)
            }
            catch(err) { 
              console.log(err))
            };
          } 
        }
    })
    .catch(err => console.log(err))
    .finally(() => {
        sftp.end();
    });