0

如何使用 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();
    });

我不断收到 no sftp connection available 错误。我很确定我在这里用 sftp.fastGet 做错了一些事情,但不知道具体是什么或从哪里开始。

4

1 回答 1

1

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

  1. 通过loop文件应该在第一个then块本身中执行。
  2. sftp.fastGet返回一个承诺,因此它是一个asynchronous, 操作,并且在循环asynchronous内执行操作forEach不是一个好主意。

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

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();
    });

于 2020-07-08T20:45:57.230 回答