node.js - promise-sftp 在“放置”后挂起
问题描述
我正在开发一个使用promise-sftp
0.11.3 版本将文件上传到 SFTP 服务器的 NodeJS 组件。我基本上是在做这些步骤:
const PromiseFtp = require('promise-sftp');
const ftp = new PromiseFtp();
await ftp.connect(...);
await ftp.put(imageBuf, './subdir/fileName');
await ftp.end();
我确保所有步骤都能正常工作,直到put
. imageBuf
是一个存储二进制图像数据的 Buffer 对象。我有这些我不明白的效果:
put
返回一个WriteStream
对象。但文档指出:“返回的承诺解析为未定义。”- 该文件未正确上传,因为它的大小为 0,即使缓冲区的大小正确。
end
呼叫不再返回。- 将图像的文件名传递给将
put
导致调用不再返回(即使在这种情况下文件已正确上传)。 - 使用
.then
链会导致相同的问题(显然?)。
我已经尝试ftp.stat
在put
. 这样做会导致不再从stat
通话中返回。我有另一个函数调用ftp.unlink
,而不是put
正常工作。这就是为什么我猜这个put
电话是罪魁祸首。
我在这里做错了吗?有什么方法可以调试我的代码以查看发生了什么/出了什么问题?
解决方案
经过进一步调查,我意识到上传的图像在将文件名传递给put
. 我试图输出调试信息(使用debug
传递给connect
调用的参数),但我看不到任何有用的提示来解决我的问题。
阅读promise-sftp
软件包的文档,我意识到最后一次更新以及最新的问题已经超过 3 年了,并且自 0.9.0 版以来没有更新文档。由于某些问题被标记为“需要帮助”,我的猜测是,该软件包没有得到积极维护。
所以我终于切换到包ssh2-sftp-client
,它是最新的。我什至不必更改代码(require
显然只有参数),上传现在完美无缺。