如何不通过命令行在Node.js代码中配置ftp-srv FTP服务为只读模式
ftp-srv 代码配置只读模式方案
无需通过CLI启动参数设置,直接在实例化FtpSrv对象时传入配置项即可实现全局/单用户粒度的只读控制,具体实现如下:
1. 安装依赖
首先安装ftp-srv模块:npm install ftp-srv
2. 完整代码示例
const FtpSrv = require('ftp-srv'); // 实例化FTP服务,传入配置对象 const ftpServer = new FtpSrv({ url: 'ftp://0.0.0.0:21', // 配置服务监听地址和端口 readOnly: true, // 全局开启只读模式,所有用户默认只读 anonymous: false // 按需配置是否允许匿名登录 }); // 登录验证逻辑 ftpServer.on('login', (loginData, resolve, reject) => { // 自定义账号密码校验逻辑 if (loginData.username === '你的用户名' && loginData.password === '你的密码') { // 验证通过,返回用户根目录 resolve({ root: '/path/to/ftp/public/directory', // 若需要单独控制当前用户的只读权限,可在此处覆盖全局配置,优先级高于全局 // readOnly: true }); } else { reject(new Error('账号或密码错误')); } }); // 启动服务 ftpServer.listen() .then(() => console.log('FTP只读服务启动成功,端口21')) .catch(err => console.error('服务启动失败:', err));
3. 配置说明
- 全局
readOnly设为true后,所有写入类FTP命令(包括文件上传、删除、重命名、创建/删除文件夹等)都会被服务端自动拒绝,返回550权限不足错误,无需额外编写拦截逻辑。 - 登录验证的
resolve返回值中传入的readOnly优先级高于全局配置,可以实现不同用户不同读写权限的精细化控制,比如管理员用户可写,普通用户只读。
4. 版本兼容注意事项
- 4.0.0及以上版本的ftp-srv使用驼峰格式的
readOnly作为配置项名 - 低于4.0.0的旧版本使用下划线格式的
read_only作为配置项名,配置不生效时可先检查模块版本调整参数名。
内容的提问来源于stack exchange,提问作者user16671539
相关产品推荐
相关产品推荐

