SSH2 sftp.fastGet卡住了

时间:2018-12-14 09:36:32

标签: node.js ssh2-sftp ssh2

我正在使用ssh2模块从FTP服务器下载多个文件。代码:

downloadFile(sftp, fileDetails) {
return new Promise((resolve, reject) => {
  const source = `${CONST.EXTRACT.FTP_DIRECTORY}/${fileDetails.fileName}`;
  const dest = `${this.getDownloadDirectory(CONST.EXTRACT.DWLD_FOLDER)}/${
    fileDetails.fileName
  }`;
  logger.info("downloadFile before fastGet ", fileDetails);
  logger.info("Source file ", source);
  logger.info("destination file ", dest);
  sftp.fastGet(source, dest, err => {
    const arr = source.split("/");
    const fileName = arr[arr.length - 1];
    logger.info("downloadFile fastGet callback invoked");
    if (err) {
      reject(
        new CustomError("Sftp download failed", {
          success: false,
          file: fileName,
          err
        })
      );
    }
    resolve(fileDetails);
  });
});

}

我为多个文件调用此命令,但是对于最后一个文件,代码未下载该文件。它被卡住,并且没有成功或错误都不会调用回调。 我为ssh2启用了调试日志记录,并且在执行fastGet方法时,调试日志显示为:

DEBUG[SFTP]: Outgoing: Writing OPEN

在此之后什么也没有发生。为什么只对一个文件而不对其他文件发生这种情况?顺便说一句,我正在为所有下载重用相同的sftp对象。

sshClient.on("ready", () => {
    isReady = true;
    logger.info("Ready");
    sshClient.sftp((err, sftp) => {
      if (err) {
        logger.error("Some error occoured ", { err });
        reject("Error establishing sftp connection");
      }
      logger.info("Sftp connection is successful");
      sftp.readdir(CONST.EXTRACT.FTP_DIRECTORY, async (err, files) => {
        if (err) {
          reject(new CustomError("Sftp read dir", err));
        }
        // Read all file 'formats' from entity db
        try {
          const result = await sortFilesByTables(files);
          resolve({ sshClient, sftp, result });
        } catch (err) {
          reject(new CustomError("Error sorting files by tables ", err));
        }
      });
    });
  });

使用上述代码中的sftp对象进行下载。

感谢您的帮助。预先感谢。

0 个答案:

没有答案