提供 FTP 协议服务与 Web 文件管理界面的 Python 项目
支持浏览器浏览/上传/下载、命令行 FTP 客户端与经典 FTP 服务
- 📁 目录浏览 - 类似传统 FTP 索引页的简洁界面
- ⬆️ 多文件上传 - 支持批量拖拽上传,单文件最大 100MB
- ⬇️ 文件下载 - 一键下载任意文件
- 📂 文件夹管理 - 新建文件夹、删除文件/文件夹
- 🔒 安全防护 - 路径穿越防护、文件名安全过滤
- 🚫 禁用缓存 - 确保文件列表实时更新
- 🎨 自定义界面 - 带有动态信息框和网站图标
- 🔐 多种认证方式 - 支持匿名登录和用户名密码认证
- 📤 文件传输 - 标准的 FTP 协议支持
- ⚙️ 灵活配置 - 自定义端口、根目录、用户权限
- 🎯 简单易用 - 交互式命令行操作
- 📋 完整功能 - ls、mkdir、rm、upload、download、rename、pwd、cd
ftp-server/
├── web_server.py # Flask Web 文件管理服务(推荐日常使用)
├── ftp_server.py # 标准 FTP 协议服务(pyftpdlib)
├── ftp_cli.py # FTP 命令行客户端
├── start_server.sh # 优化的服务器启动脚本(自动查找可用端口)
├── requirements.txt # Python 依赖
├── ftp_root/ # 默认文件根目录(自动创建)
├── templates/ # Web 界面模板
│ ├── index.html
│ ├── mkdir.html
│ └── delete_confirm.html
├── static/ # 静态资源
│ └── favicon.ico # 网站图标
└── docs/ # 项目文档
├── API.md
└── ARCHITECTURE.md
cd ftp-server
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt方式一:使用启动脚本(推荐)
chmod +x start_server.sh
./start_server.sh启动脚本会:
- ✅ 自动检测并停止已运行的服务进程
- 🔍 自动查找可用端口(默认 8000,被占用则自动递增)
- 🎨 彩色输出日志信息
- 🚀 优化的进程管理
方式二:直接启动
python web_server.py --port 5001浏览器访问:**http://127.0.0.1:5001**(或脚本显示的端口)
- 支持:浏览目录、上传文件、下载文件、新建文件夹、删除文件/文件夹
- 支持多文件同时上传
- 开发时加
--debug可自动重载模板:python web_server.py --port 5001 --debug
python ftp_server.py --port 2121- 使用 FTP 客户端(FileZilla、命令行
ftp等)连接ftp://localhost:2121 - 匿名登录:用户名
anonymous,密码任意
需先启动 ftp_server.py,然后:
python ftp_cli.py --host localhost --port 2121 --user admin --password admin123 ls
python ftp_cli.py upload ./local.txt
python ftp_cli.py download remote.txt| 参数 | 说明 | 默认值 |
|---|---|---|
--host |
监听地址 | 0.0.0.0 |
--port |
端口 | 5000 |
--root |
文件根目录 | ./ftp_root |
--debug |
调试模式(模板/代码变更自动重载) | 关 |
示例:
python web_server.py --port 5001 --root /path/to/share --debug| 参数 | 说明 | 默认值 |
|---|---|---|
--host |
监听地址 | 0.0.0.0 |
--port |
FTP 端口 | 2121 |
--root |
FTP 根目录 | ./ftp_root |
--user |
登录用户名 | 无 |
--password |
登录密码 | 无 |
--no-anonymous |
禁止匿名登录 | 默认允许匿名 |
在与 FTP 服务配合使用时,支持:
ls [path]— 列出目录mkdir <name>— 创建目录rm <path>— 删除文件或目录upload <local> [remote]— 上传文件download <remote> [local]— 下载文件rename <old> <new>— 重命名pwd— 显示当前目录cd <path>— 切换目录
- flask ≥ 3.0 — Web 界面
- pyftpdlib ≥ 1.5.9 — FTP 服务(仅在使用
ftp_server.py时需要)
- 默认配置仅适合本地或内网使用。
- 生产环境请修改
web_server.py中的secret_key,并考虑使用 HTTPS 与 WSGI 服务器。 - FTP 服务建议仅在可信网络使用,或配合 VPN/防火墙;可参考 pyftpdlib 文档配置 FTPS。
启动服务后,浏览器访问 http://localhost:5000 即可看到类似传统 FTP 站点的文件索引页面:
- 📂 清晰的目录结构展示
- 📊 文件大小和修改时间显示
- ⬆️ 拖拽上传文件
- 🗑️ 安全的文件删除确认
欢迎提交 Issue 和 Pull Request!
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 提交 Pull Request
本项目采用 MIT 许可证 - 详见 LICENSE 文件
如有问题或建议,欢迎提交 Issue
如果这个项目对你有帮助,请给一个 ⭐️ Star!
Made with ❤️ by Python & Flask
