Node js - ftp-srv - 需要简单的 ftp 服务器示例

2024-03-31

最近几天我试图让一个简单的 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';

这对我有用。


当您收到login事件,您需要致电resolve or reject根据您决定身份验证的结果。

如果您认为登录信息正确,请致电resolve,向其传递一个包含相关详细信息的对象,例如:

resolve({root: '/path/to/files/accessible/via/ftp'})

另请注意,如果您在专用网络上进行本地测试,则可能应该使用本地 IP 或127.0.0.1作为主机名。0.0.0.0使其使用外部 IP 地址。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node js - ftp-srv - 需要简单的 ftp 服务器示例 的相关文章

随机推荐

  • 如何用R代码编织Rmd文件生成word文档

    我已经创建了一个 Rmd 文件 并且我知道如果我转到工具栏并选择 knit to word 它将为我生成一个 Word 文档 我的问题是如何使用 R 代码执行此操作 而无需实际单击顶部工具栏上的 knit to word 选项 我有这段代码
  • 如何使用带有空格的命令名称?

    当 python bot 中的命令之间有空格时 如何使 bot 工作 我知道我们可以使用子命令或on message但是是否还有其他选项可以仅对选定的命令而不是对所有命令执行此操作 下面的代码将不起作用 bot command pass c
  • Java - 按步骤切片任何数组

    在 python 中 我们可以执行以下操作 array 0 1 2 3 4 5 6 7 8 9 10 new array array 3 print new array gt gt gt 0 3 6 9 Java中有类似的东西吗 我一直在寻
  • 朱莉娅中的矢量化“in”函数?

    我经常想要循环遍历数据帧的长数组或列 并且对于每个项目 查看它是否是另一个数组的成员 而不是做 giant list a c j good letters a b isin falses size giant list 1 for i 1
  • 如何一次推送单个docker镜像层?

    我已经开始推送新的镜像 场景是这样的 b57ecdb750f2 Pushing gt 43 57MB 473 9MB 9b7e4da6c261 Pushing gt 18 94kB 21d523b40367 Pushed e18c77c6a
  • TCP/IP 消息帧

    我制作了一个 TCP IP 服务器 客户端 它是异步的 但它连接了消息 如何正确地在开头添加标头 然后在末尾使用字符串生成器来取消连接完整消息 服务器读取消息 Private Sub ReadCallback ByVal result As
  • 在 componentDidMount 中导航-react-router-dom v6

    这是我第一次使用react router dom v6 我对v4很熟悉 我有一个电影列表 每部电影都有一个 id 如果用户在 url 中输入了错误的电影 id 我需要导航到未找到的页面 我使用类组件的问题所以我坚持使用 componentD
  • R - 通过多个 URL 进行网页抓取?带着 rvest 和 purrr

    我正在尝试为我正在从事的项目抓取足球统计数据 并且我正在尝试利用 rvest 和 purrr 来循环遍历 url 末尾的数值 我不确定我错过了什么 但我有一段代码以及不断出现的错误消息 library xml2 library rvest
  • WPF c# .net 框架 4.8 x:绑定

    我读到x Bind 它比Binding 但是在我的应用程序 WPF C 和 NET Framework 4 8 中 当我把x Bind在任何部分 TextBox Text x Bind Visual Studio 对我说 Windows P
  • 随机数:0或1

    我是不是看得太远了 看不到像选择一个数字 0 或 1 这样简单的事情 Random rand new Random if rand NextDouble 0 lnkEvents CssClass selected else lnkNews
  • 创建动态匿名类型变量

    我可以创建一个匿名类型变量 然后添加更多属性吗 E g var x new Name Ahmed 并想添加Age到它 我怎样才能做到这一点 另一个问题 我在一些博客上看到一种类型AnonymousType这个类的名称空间是什么 这是例子ht
  • 自定义 CKEditor 工具栏

    我想自定义CKEditor的工具栏 不过 首先我想要一个工具栏可用选项的完整列表 我搜索了工具栏选项并发现了以下不完整列表 请帮我找到完整的列表 以便我可以根据我的要求进行选择 config toolbar MyToolbar name d
  • 寻找一种算法(二维二分查找的版本)

    简单的问题和已知的算法 我有一个有 100 名成员的大数组 前 X 个成员为 0 其余为 1 找到 X 我通过二分查找来解决这个问题 检查成员 50 如果它是 0 检查成员 75 等等 直到找到相邻的 0 和 1 我正在寻找针对二维相同问题
  • 将 ArrayBuffer 响应转换为 JSON

    在这里 我调用 GetFile 以 ArrayBuffer 对象的形式获取响应 如果我执行 response errors undefined 则在网络选项卡中响应为 errors photoProof Image is not avail
  • 在 postgres 查询中使用 ANY 时,有没有办法保留顺序或数组?

    我希望能够使用进行查询ANY它维护传递给 any 函数的数组的顺序 考虑这个简单的例子 create table stuff id serial value int insert into stuff value values 1 2 3
  • QProgressBar不显示进度?

    我在更新进度条时的第一个天真的做法是在正在进行处理的循环中包含以下几行 制作如下内容 while data hasMoreItems doSomeProcessing data nextItem Added these lines but
  • 使用 $& 全局变量的编程别名方法

    我正在尝试给一个使用 Ruby 特殊方法的方法起别名 返回最后一个正则表达式匹配 http jimneath org 2010 01 04 cryptic ruby global variables and their meanings h
  • GOLANG:遍历目录树并处理文件 -- err = '没有这样的文件或目录

    我正在编写一个例程来遍历目录树并为我找到的每个文件创建数字签名 加盐哈希 在测试它时 我得到了这种奇怪的行为 如果我给程序一个目录 上方 的根路径 程序可以遍历树并打印出文件名 但是如果我尝试打开文件以读取它的字节 我在例程找到的文件上收到
  • 聚合 ViewModel 是个好主意吗?

    将一个 ViewModel 作为另一个 ViewModel 的属性是好还是坏主意 例如 public sealed class ContentManagerViewModel ViewModel public FindViewModel F
  • Node js - ftp-srv - 需要简单的 ftp 服务器示例

    最近几天我试图让一个简单的 ftp 服务器在 NodeJS 中运行 我在这里找到了一个名为 ftp srv 的包 其中包含一些文档 https www npmjs com package ftp srv https www npmjs co