最近几天我试图在 NodeJS 中运行一个简单的 ftp 服务器。
我在这里找到了一个名为“ftp-srv”的包和一些文档: https://www.npmjs.com/package/ftp-srv
受到代码片段的启发,我写了一个小脚本:
const FtpSrv = require ( 'ftp-srv' );
const hostname = '0.0.0.0';
const port = 1111
const ftpServer = new FtpSrv ( 'ftp://' + hostname + ':' + port,
{ anonymous: true, greeting : [ "Hello Jong", "Wie gehts?" ] } );
ftpServer.on ( 'login', ( data, resolve, reject ) =>
{
console.log ( 'data: ' + data );
console.log ( 'resolve: ' + resolve );
console.log ( 'reject: ' + reject );
});
ftpServer.on ( 'client-error', (connection, context, error) =>
{
console.log ( 'connection: ' + connection );
console.log ( 'context: ' + context );
console.log ( 'error: ' + error );
});
ftpServer.listen()
.then(() =>
{
console.log ( `Server running at http://${hostname}:${port}/` );
});
我可以用“node ftpserver.js”启动脚本,它运行没有问题。 如果我使用 FTP 客户端软件连接,它似乎可以连接,但会等待“欢迎消息”并在此时挂起。
我提供了“问候语”-Variable,但该文本未发送到客户端。
我在谷歌中搜索了很多但找不到“ftp-srv”的任何工作示例。
我认为我必须填写一些代码的地方在这里:
ftpServer.on ( 'login', ( data, resolve, reject ) =>
{
// HERE
});
如果有人可以提供一些示例代码来获得有效的客户端连接并克服问候消息,那将对我有很大帮助。
--- 编辑---
jcaron 的建议很有帮助,我现在更进了一步。这些是我的更改:
[...]
ftpServer.on ( 'login', ( data, resolve, reject ) =>
{
resolve ( { root: '/home/peter/apps/ftpfiles' } );
});
[...]
当我现在连接到客户端时,客户端会尝试读取远程目录。尝试 3 次后,客户端超时。
客户端似乎无法访问目录“/home/peter/apps/ftpfiles”。我可以说它存在并且具有我启动“ftpserver.js”脚本的用户的读/写权限。
我尝试了一些使用 fs-object 而不是 root:[dir] 的东西,但总是看到相同的行为。
谁能帮忙?
--- 编辑---
另外简单的改
const hostname = '0.0.0.0';
#to local address:
const hostname = '192.x.y.z';
它对我有用。
最佳答案
当您收到login
事件时,您需要根据您决定的身份验证结果调用resolve
或reject
.
如果您认为登录信息是正确的,调用resolve
,传递一个包含相关细节的对象,例如:
resolve({root: '/path/to/files/accessible/via/ftp'})
另请注意,如果您在专用网络上进行本地测试,您可能应该使用本地 IP 或 127.0.0.1
作为主机名。 0.0.0.0
使其使用外部 IP 地址。
关于javascript - Node js - ftp-srv - 需要简单的 ftp 服务器示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46234845/