我正在尝试从ftp加载多个文件,但出现错误:“写入结束”。我找不到问题。
connections.js
async function getFtpFileContent(_path) {
const ftpConfig = {
host: config.FTPhost.replace('https://', ''),
username: config.FTPusername,
password: config.FTPpassword
};
let ftpFileContent;
let sftp = new StfpClient();
try {
await sftp.connect(ftpConfig);
const stream = await sftp.get(_path);
ftpFileContent = await readStream(sftp, stream);
stream.close();
await sftp.end();
} catch (error) {
console.log('FTP Error: \n', error);
}
return ftpFileContent;
}
function readStream(sftp, stream) {
return new Promise((resolve, reject) => {
let body;
stream.on('data', chunk => {
body += chunk;
});
stream.on('end', () => {
resolve(body);
});
stream.on('error', err => reject(err));
});
}
调用下一个方法:
async function getFiles(req, res) {
// first file
let fileContent = await conn.getFtpFileContent(filePath);
// second file
let fileContent2 = await conn.getFtpFileContent(filePath2);
}
当我第二次调用方法getFtpFileContent时,遇到了上述错误(“ end after after”)。
能帮我吗?我在哪里做错了?
答案 0 :(得分:0)
我不确定您的问题在哪里,但是您应该在getFtpFileContent函数中调用stream.close()吗?我没有看到有关流的close方法的任何信息,只有close事件。
答案 1 :(得分:0)
我发现了问题。问题出在我稍后使用的CSV转换器中。转换器使用的可写流在转换后没有关闭。