В последние дни я пытаюсь получить простой ftp-сервер, работающий в Node JS.
Я нашел пакет с именем "ftp-srv" с некоторой документацией здесь: https://www.npmjs.com/package/ftp-srv
Вдохновляю код-snipptes там написал небольшой скрипт:
const FtpSvr = require ( 'ftp-srv' );
const hostname = '0.0.0.0';
const port = 1111
const ftpServer = new FtpSvr ( '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-Client Software, он, кажется, подключается, но ждет "Приветственное сообщение" и висит на этом месте.
Я предоставил "приветствие" -Variable, но этот текст не отправляется клиенту.
Я много искал в google, но не смог найти никаких рабочих примеров для "ftp-srv".
Я думаю, что здесь я должен заполнить какой-то код:
ftpServer.on ( 'login', ( data, resolve, reject ) =>
{
// HERE
});
Это очень помогло бы мне, если бы кто-нибудь мог предоставить примерный код, чтобы получить рабочее клиентское соединение и прервать приветственное сообщение.
--- Редактировать ---
Совет от jcaron помог много, Im еще один шаг дальше. Это мои изменения:
[...]
ftpServer.on ( 'login', ( data, resolve, reject ) =>
{
resolve ( { root: '/home/peter/apps/ftpfiles' } );
});
[...]
Когда я подключаюсь к клиенту, клиент пытается прочитать удаленный каталог. После 3 попыток клиент получает тайм-аут.
Похоже, клиент не может получить доступ к каталогу /home/peter/apps/ftpfiles. Я могу сказать, что он существует и имеет права на чтение/запись пользователем, с которого я запускаю свой "ftpserver.js" -Script.
Я попробовал некоторые вещи с fs-объектом вместо root: [dir], но всегда вижу то же поведение.
Может ли кто-нибудь помочь?
--- Редактировать ---
Кроме того, просто изменилось
const hostname = '0.0.0.0';
#to local address:
const hostname = '192.x.y.z';
и это сработало для меня.
Когда вы получаете событие login
в login
, вам необходимо позвонить либо resolve
либо reject
исходя из того, что вы решили, в результате проверки подлинности.
Если вы считаете, что информация для входа верна, resolve
вызов, передав ему объект с соответствующими данными, например:
resolve({root: '/path/to/files/accessible/via/ftp'})
Также обратите внимание, что если вы тестируете локально в частной сети, вы, вероятно, должны использовать локальный IP или 127.0.0.1
качестве имени хоста. 0.0.0.0
использует внешний IP-адрес.
0.0.0.0
на127.0.0.1
в первом случае или действительный локальный IP в любом случае.