基于 Rust + Axum 的高性能文件加速下载服务 (High-performance file acceleration download service)
- 高性能: 基于 Rust 和 Axum 框架,提供极致性能。
- GitHub 加速: 自动识别并加速 GitHub 文件下载。
- GitHub API 支持: 支持通过
GITHUB_TOKEN环境变量进行身份验证,避免 API 速率限制。 - 智能重定向: 自动处理 HTTP 重定向和 URL 转换。
- CORS 支持: 完整的跨域资源共享支持。
- 多种访问方式: 支持带协议头(
https://...)、不带协议头(github.com/...)或单斜杠(https:/github.com/...)的代理请求。 - 现代界面: 蓝色渐变设计的现代化 Web 界面。
- 详细日志: 结构化日志记录,支持多级别日志输出。
- 灵活配置: 支持命令行参数和环境变量配置。
- 容器化: 提供 Docker 镜像,支持 amd64/arm64 多平台部署。
# Ubuntu/Debian
sudo apt update -y
sudo apt install -y pkg-config libssl-dev
# CentOS/RHEL
sudo yum install -y pkgconfig openssl-devel
# macOS
brew install pkg-config openssl- 下载源码
git clone https://github.com/idevsig/filetas.git
cd filetas- 开发环境运行
cargo run- 生产环境构建
cargo build --release
./target/release/filetasfiletas [OPTIONS]
选项:
-H, --host <HOST> 服务器监听地址 [默认: 0.0.0.0] [环境变量: HOST]
-p, --port <PORT> 服务器端口 [默认: 8000] [环境变量: PORT]
-t, --title <TITLE> 页面标题 [默认: 文件加速下载] [环境变量: TITLE]
--template-dir <DIR> 模板目录路径 [默认: templates] [环境变量: TEMPLATE_DIR]
--user-agent <USER_AGENT> 请求用户代理 [环境变量: USER_AGENT]
-v, --verbose 启用详细日志 (等同于 RUST_LOG=debug)
-q, --quiet 启用安静模式 (等同于 RUST_LOG=warn)
-h, --help 显示帮助信息
-V, --version 显示版本信息# 基本使用
filetas
# 自定义端口和主机
filetas --host 127.0.0.1 --port 3000
# 自定义页面标题
filetas --title "我的文件服务器"
# 启用详细日志
filetas --verbose
# 使用环境变量
HOST=0.0.0.0 PORT=8080 TITLE="File Server" GITHUB_TOKEN=your_token filetas
# 组合使用
RUST_LOG=debug filetas --port 8080 --title "开发服务器"| 变量名 | 描述 | 默认值 |
|---|---|---|
HOST |
服务器监听地址 | 0.0.0.0 |
PORT |
服务器端口 | 8000 |
TITLE |
页面标题 | 文件加速下载 |
TEMPLATE_DIR |
模板目录路径 | templates |
USER_AGENT |
请求用户代理 | Mozilla/5.0 ... |
GITHUB_TOKEN |
GitHub 个人访问令牌(用于 API 加速) | (无) |
RUST_LOG |
日志级别 | filetas=info,tower_http=info |
# 默认日志级别 (INFO)
filetas
# 详细调试日志
filetas --verbose
# 或
RUST_LOG=debug filetas
# 只显示警告和错误
filetas --quiet
# 或
RUST_LOG=warn filetas
# 自定义日志级别
RUST_LOG=filetas=trace,tower_http=debug filetas- Releases:
https://github.com/user/repo/releases/download/v1.0.0/file.zip - Archive:
https://github.com/user/repo/archive/refs/heads/main.zip - Raw 文件:
https://github.com/user/repo/raw/main/file.txt - Blob 文件:
https://github.com/user/repo/blob/main/file.txt(自动转换为 raw) - Gist:
https://gist.github.com/user/gist-id/raw/file.txt - Tags:
https://github.com/user/repo/tags
服务支持非常灵活的 URL 格式,会自动识别并补全:
http://localhost:8000/https://github.com/user/repo/archive/main.zip(完整 URL)http://localhost:8000/github.com/user/repo/archive/main.zip(自动补全 https)http://localhost:8000/https:/github.com/user/repo/archive/main.zip(修正单斜杠)
- 任何 HTTP/HTTPS 文件 URL
- 自动处理重定向
- 支持大文件流式传输
- 访问
http://localhost:8000 - 在输入框中粘贴文件 URL
- 点击下载按钮或按回车键
- 文件将通过加速服务下载
| 镜像仓库 | 镜像地址 | 说明 |
|---|---|---|
| Docker Hub | idevsig/filetas:latest |
官方镜像仓库 |
| GitHub Container Registry | ghcr.io/idevsig/filetas:latest |
GitHub 容器注册表 |
| 阿里云容器镜像服务 | registry.cn-guangzhou.aliyuncs.com/idevsig/filetas:latest |
阿里云镜像 |
| 腾讯云容器镜像服务 | sgccr.ccs.tencentyun.com/idevsig/filetas:latest |
腾讯云镜像 |
# Docker Hub
docker run -p 8000:8000 -d idevsig/filetas:latest
# GitHub Registry
docker run -p 8000:8000 -d ghcr.io/idevsig/filetas:latest
# 阿里云镜像(国内用户推荐)
docker run -p 8000:8000 -d registry.cn-guangzhou.aliyuncs.com/idevsig/filetas:latest
# 腾讯云镜像
docker run -p 8000:8000 -d sgccr.ccs.tencentyun.com/idevsig/filetas:latest
# 使用 GITHUB_TOKEN
docker run -p 8000:8000 -e GITHUB_TOKEN=your_token -d idevsig/filetas:latestservices:
filetas:
image: idevsig/filetas:latest
container_name: filetas
restart: unless-stopped
ports:
- "8000:8000"
environment:
- HOST=0.0.0.0
- PORT=8000
- TITLE=文件加速下载
- GITHUB_TOKEN=your_token_here
- RUST_LOG=filetas=info
volumes:
- ./templates:/app/templates # 可选:自定义模板# 构建镜像
docker build -f docker/Dockerfile -t my-filetas .
# 运行
docker run -p 8000:8000 -d my-filetas# 通过服务下载文件
curl -L "http://localhost:8000/https://example.com/file.zip" -o file.zip
# GitHub 文件加速
curl -L "http://localhost:8000/https://github.com/user/repo/releases/download/v1.0.0/file.zip" -o file.zip服务支持跨域请求,可以在前端 JavaScript 中直接使用:
// 获取文件
fetch("http://localhost:8000/https://example.com/file.json")
.then((response) => response.json())
.then((data) => console.log(data));
// 下载文件
const downloadUrl =
"http://localhost:8000/" + encodeURIComponent("https://example.com/file.zip");
window.open(downloadUrl);filetas/
├── docker/
│ ├── Dockerfile # Docker 构建文件
│ └── docker-bake.hcl # Docker Bake 构建配置
├── src/
│ └── main.rs # 主程序
├── templates/
│ └── index.html # Web 界面模板
├── Cargo.toml # 项目配置
├── Cargo.lock # 依赖锁定文件
└── README.md
# 克隆项目
git clone https://github.com/idevsig/filetas.git
cd filetas
# 安装依赖并运行
cargo run
# 开启详细日志的开发模式
RUST_LOG=debug cargo run -- --verbose
# 运行测试
cargo test
# 代码格式化
cargo fmt
# 代码检查
cargo clippy- 使用 Rust 的零成本抽象和内存安全特性
- 基于 Tokio 异步运行时,支持高并发
- 流式传输大文件,减少内存占用
- 智能重定向处理,减少不必要的请求
- 结构化日志记录,便于性能分析
- 端口被占用
filetas --port 8080
- 模板文件未找到
filetas --template-dir /path/to/templates
- SSL/TLS 错误
# 确保安装了 OpenSSL 开发包 sudo apt install libssl-dev pkg-config
欢迎提交 Issue 和 Pull Request!
本项目采用 Apache-2.0 许可证 - 查看 LICENSE 文件了解详情。