Node.js sftp下载文件

3
我将使用Node.js从远程服务器拉取文件。我希望能够在获取文件路径时随时下载这些文件。我尝试了连接和拉取文件。
var Client = require('ssh2-sftp-client');
var sftp = new Client();

var remotePathToList = '/archiveFiles/file.wav';

sftp.connect({
    host: '*******',
    port: '22',
    username: '******',
    password: '******'
}).then(() => {
   res.download(remotePathToList);
}).catch((err) => {
   console.log(err, 'catch error');

但是我得到了一个“ENOENT:没有这样的文件或目录,stat”C:/archiveFiles/file.wav'”。但是我正在尝试从远程服务器下载这些文件,而不是从我的本地桌面。


你确定主机名是正确的主机名或IP地址吗?否则它会默认为本地主机。 - Shivam
是的,我确保通过列出目录来测试连接。但我不确定使用res.download是否是正确的方法。 - carlos E.
我刚看了文档,难道不应该是sftp.get(remoteFilePath, [useCompression], [encoding]);,详见此处 - Shivam
1个回答

1
请查看您使用的库ssh2-sftp-client的文档。有一个get方法用于检索文件,并在此处提供一个示例here
这是一个可能适用于您的示例。
sftp.connect(config).then(() => {  
  sftp.get('/archiveFiles/file.wav').then((data) => {
    var outFile = fs.createWriteStream('file.wav')
    data.on('data',function(response) {
      outFile.write(response);
    });
    data.on('close', function() {
      outFile.close();
    });
  });
})

我搞定了,谢谢!但我收到一个警告 (node:1656) UnhandledPromiseRejectionWarning: 未处理的 Promise 拒绝 (rejection id: 1): TypeError: sftp.get(...).pipe 不是一个函数。 - carlos E.
@carlosE 看起来 get 作为一个 Promise 解析,我已经更新了上面的代码。 - dzm
由于某种原因,当文件下载完成后我尝试播放它时,会出现“Windows Media Player无法播放该文件。播放器可能不支持文件类型或可能不支持用于压缩文件的编解码器。”的错误提示。即使在存储时该文件是可播放的。 - carlos E.
@carlosE,这个问题有什么解决方案吗?我也遇到了同样的问题。 - Pritiranjan Mishra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接