首页 > 解决方案 > Node.js中的SFTP上传空文件

问题描述

我正在处理一个项目时遇到问题,我正在使用一个名为 sftp-ssh2-client 的节点模块从我的 FTP 服务器下载文件,然后尝试将流传递回我的 FTP 服务器,但传递到另一个目录。

代码如下所示:

const stream = sftp.get(`path/to/file.csv.gz`).then(() => {

}).catch((err) => {

});

sftp.put(stream, 'path/to/new/file.csv.gz').then(() => {

}).catch((err) => {

})

但是,当我拨入我的 FTP 服务器到文件被放置到的位置时,文件大小为 0,并且下载时已损坏。谁能告诉我我在这里做错了什么?

非常感谢,

G

标签: node.jssftpssh2-sftp

解决方案


sftp.get()不返回流,它返回解析为流的承诺,因此您的代码应如下所示:

sftp.get('path/to/file.csv.gz').then(stream => {
  return sftp.put(stream, 'path/to/new/file.csv.gz');
}).catch(err => {
  ...
});

但是,在我看来,您可以只使用sftp.rename(),这不需要下载和上传整个文件:

sftp.rename('path/to/file.csv.gz', 'path/to/new/file.csv.gz').then(...);

此外,如果您确实想采用先下载后上传的方式,请务必阅读有关 encoding 的文档


推荐阅读