0

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

起初,当 API 被命中时,我能够使用 get() 方法下载文件——我还可以在 console.log 语句中返回整个文件内容,然后它开始返回 Buffer 内容。我更新了这个:

npm install 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');
    });

};

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

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

4

1 回答 1

0

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

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

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

于 2019-09-17T09:30:38.917 回答