最近几天我试图让一个简单的 ftp 服务器在 NodeJS 中运行。
我在这里找到了一个名为“ftp-srv”的包,其中包含一些文档:https://www.npmjs.com/package/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 客户端软件,它似乎可以连接,但会等待“欢迎消息”并在此时挂起。
我提供了“问候语”变量,但该文本不会发送给客户端。
我在谷歌中搜索了很多,但找不到“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';
这对我有用。