Узел js - ftp-srv - нужен простой пример сервера ftp

1

В последние дни я пытаюсь получить простой 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';

и это сработало для меня.

Теги:

1 ответ

3
Лучший ответ

Когда вы получаете событие 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.0.0 на 127.0.0.1 в первом случае или действительный локальный IP в любом случае.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню