我正在使用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对象进行下载。
感谢您的帮助。预先感谢。