# FTP Server for Windows 基于 Go 语言开发的轻量级 FTP 服务器,带 Web 管理面板,专为 Windows 环境设计。 ## 功能特性 ### FTP 服务 - 完整的 FTP 协议支持(RFC 959) - 主动模式(PORT)和被动模式(PASV) - 文件上传 / 下载(STOR / RETR) - 目录浏览、创建、删除(LIST / MKD / RMD) - 文件删除、重命名(DELE / RNFR / RNTO) - 每用户独立的 HomeDir 和权限控制(只读 / 可写) ### Web 管理面板 - 管理员登录认证(Token 机制,24h 自动过期) - 仪表盘 — 服务器状态实时概览 - 用户管理 — 添加 / 编辑 / 删除 FTP 用户 - 系统设置 — 修改 FTP 端口、Web 端口、管理员密码 ## 快速开始 ### 编译 确保已安装 Go 1.21+,然后执行: ```bash go build -o ftp-server.exe ./cmd/ ``` ### 运行 ```bash # 使用默认配置启动 .\ftp-server.exe # 指定配置文件 .\ftp-server.exe -config myconfig.json ``` 首次运行会自动生成 `config.json` 配置文件和 `ftp_root` 根目录。 ### 访问 | 服务 | 地址 | |------|------| | Web 管理面板 | http://localhost:8080 | | FTP 服务 | localhost:2121 | ### 默认账号 | 服务 | 用户名 | 密码 | |------|--------|------| | Web 管理面板 | `admin` | `admin123` | | FTP 默认用户 | `ftpuser` | `ftp123` | > 请在首次登录后立即修改默认密码。 ## 配置说明 配置文件为 `config.json`,结构如下: ```json { "ftp": { "host": "0.0.0.0", "port": 2121, "passivePortMin": 50000, "passivePortMax": 50100, "rootDir": "./ftp_root" }, "web": { "host": "0.0.0.0", "port": 8080 }, "admin": { "username": "admin", "password": "admin123" }, "ftpUsers": [ { "username": "ftpuser", "password": "ftp123", "homeDir": "./ftp_root", "write": true } ] } ``` | 字段 | 说明 | |------|------| | `ftp.host` | FTP 监听地址 | | `ftp.port` | FTP 端口(默认 2121,避免需要管理员权限) | | `ftp.passivePortMin/Max` | 被动模式端口范围 | | `ftp.rootDir` | FTP 根目录 | | `web.host` | Web 面板监听地址 | | `web.port` | Web 面板端口 | | `admin.username/password` | 管理员凭据 | | `ftpUsers` | FTP 用户列表 | | `ftpUsers[].homeDir` | 用户主目录 | | `ftpUsers[].write` | 是否允许写入 | ## FTP 客户端连接 推荐使用 [FileZilla](https://filezilla-project.org/) 或 Windows 资源管理器连接: ``` 主机: localhost 端口: 2121 用户名: ftpuser 密码: ftp123 ``` ## 项目结构 ``` FTP-server/ ├── cmd/main.go # 主程序入口 ├── config/config.go # 配置管理模块 ├── ftp/server.go # FTP 服务核心 ├── web/server.go # Web 管理面板后端 API ├── static/embed.go # 前端 HTML 页面(内嵌) ├── go.mod # Go 模块定义 └── config.json # 运行时配置(自动生成) ``` ## 技术栈 - **Go** — 无需运行时依赖,单文件部署 - **标准库 net/http** — Web 管理面板 - **标准库 net** — FTP 协议实现 - **内嵌 HTML/CSS/JS** — 无需额外前端文件 ## 许可证 MIT License