如何在 API 调用 (Node.js) 中从 ReadableStream 读取和下载文件?

How can I read and download a file from a ReadableStream on an API call (Node.js)?

我正在使用 ssh2-sftp-client 从远程服务器获取文件,我 运行 遇到读取和下载这些文件的问题,一旦我 get() 它们。

起初,我可以在 API 被击中时使用 get() 方法下载文件 - 我也可以 return 将整个文件内容 console.log 语句然后它开始 returning 缓冲区内容。我更新了这个:

npm 安装 ssh2-sftp-client@3.1.0

现在我得到了一个 ReadbleStream。

function getFile(req,res) {
    sftp.connect(config).then(() => {
        return sftp.get(process.env.SFTP_PATH  + '/../...xml',true);
    }).then((stream)=>{
        const outFile = fs.createWriteStream('...xml')
        stream.on('data', (c) => {
            console.log(`Received ${c.length} bytes of data.`);
           outFile.write(c);  
           res.send('ok')         
          });
         stream.on('close', function() {    
        });
    }).catch((err) => {
        console.log(err, 'catch error');
    });

};

我有上面的代码 return 是一个流,但我不确定如何获取文件 - write() 方法在这里似乎不起作用。

任何关于我如何使用这个库来阅读和下载文件的意见或建议都将不胜感激

首先,不要使用版本3.x。该版本已被弃用。最新版本是 v4.1.0 并进行了大量清理工作以修复许多小错误。

如果您只想下载文件,请使用 fastGet() 方法。它需要 2 个参数,源路径和目标路径。它比普通的 get 快很多,因为它是并行下载的。

如果您不想这样做,则 get() 方法有多种选择。如果你只传入一个参数(来源),它将 return 一个缓冲区。如果传入 2 个参数,则第二个参数必须是字符串(本地文件的路径)或可写流。如果是可写流,数据将通过管道传输到该流中。