跳到主要内容File-Transfer-Go 开源跨平台文件传输工具 | 极客日志Go / Golang
File-Transfer-Go 开源跨平台文件传输工具
File-Transfer-Go 是一款基于 Go 语言开发的高性能跨平台文件传输工具,支持局域网及互联网环境下的 P2P 直连、WebRTC 及 HTTP 传输。具备 Web 界面、断点续传、大文件支持、TLS 加密及安全认证等特性。支持二进制安装、Docker 部署及源码编译,可集成至 Nginx 或云存储,适用于企业内部共享、开发团队协作及个人文件互传场景。
星星泡饭2 浏览 File-Transfer-Go 是一个用 Go 语言开发的高性能、跨平台文件传输工具,支持局域网和互联网文件传输。它类似于一个简化的 WeTransfer 或 SendAnywhere,但完全开源且可自托管。
✨ 核心特性
1. 传输功能
- ✅ Web 界面 - 基于浏览器的友好界面
- ✅ P2P 传输 - 支持点对点直接传输
- ✅ 大文件支持 - 支持 GB 级别大文件
- ✅ 断点续传 - 传输中断后可继续
- ✅ 批量传输 - 同时传输多个文件
- ✅ 目录传输 - 保持目录结构
2. 技术特性
- 🚀 高性能 - Go 语言编译,传输速度快
- 🔒 加密传输 - TLS/SSL 加密支持
- 📱 跨平台 - Windows、Linux、macOS
- 🌐 WebRTC - 支持浏览器直接传输
- 🔗 二维码分享 - 手机扫码快速接收
- ⚡ 零配置 - 开箱即用
🏗️ 架构设计
组件架构:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ Web UI │◄──►│ HTTP Server │◄──►│ 文件管理器 │ └─────────────┘ └─────────────┘ └─────────────┘ │ ┌───────▼───────┐ │ 传输引擎核心 │ ├───────────────┤ │ P2P 模块 │ │ HTTP 模块 │ │ WebRTC 模块 │ └───────┬───────┘ │ ┌───────▼───────┐ │ 网络层/IO │ └───────────────┘
🚀 快速开始
安装方式
1. 二进制安装(最简单)
curl -L https://github.com/xxx/file-transfer-go/releases/latest/download/ftg-linux-amd64 -o ftg
chmod +x ftg
./ftg
2. Docker 运行
docker run -d \
-p 8080:8080 \
-v /path/to/data:/data \
--name file-transfer \
filetransfer/go
3. 源码编译
git clone https://github.com/xxx/file-transfer-go.git
cd file-transfer-go
go build -o ftg main.go
./ftg
配置文件示例
server:
port: 8080
host: "0.0.0.0"
ssl:
enable: false
cert: "cert.pem"
key: "key.pem"
storage:
path: "./uploads"
max_size: "10GB"
total_size: "100GB"
transfer:
chunk_size: 5242880
threads: 4
timeout: 300
security:
enable_auth: false
allow_origins: ["*"]
token_expire: 24h
📖 使用示例
1. 基本使用
./ftg serve
./ftg serve --port 9000 --host 192.168.1.100
./ftg serve --ssl --cert cert.pem --key key.pem
2. Web 界面操作
访问 http://localhost:8080 即可使用:
- 上传文件:拖拽或选择文件
- 生成链接:自动生成分享链接
- 二维码:手机扫码下载
- 管理文件:查看、删除已上传文件
3. 命令行传输
./ftg send /path/to/file.txt --recipient 192.168.1.101:8080
./ftg receive --output ./downloads
./ftg send /path/to/folder --recursive
4. API 使用
curl -X POST http://localhost:8080/api/upload \
-F "[email protected]"
curl http://localhost:8080/api/files
curl -O http://localhost:8080/api/download/{file_id}
🔧 高级功能
1. P2P 直连模式
./ftg serve --mode p2p
./ftg send file.jpg --p2p
./ftg receive --code XXXXXX
2. WebRTC 传输
const ftg = new FileTransferGo({
signalingServer: 'ws://localhost:8080/ws',
onProgress: (progress) => {
console.log(`传输进度:${progress}%`);
}
});
await ftg.sendFile(file);
await ftg.receiveFile(fileId);
3. 断点续传
resumeInfo := client.CheckResume(fileHash)
if resumeInfo.CanResume {
client.ResumeUpload(filePath, resumeInfo.Offset)
}
🛠️ 开发指南
项目结构
file-transfer-go/
├── cmd/ # CLI 命令
│ ├── serve.go # 服务启动
│ ├── send.go # 发送命令
│ └── receive.go # 接收命令
├── internal/
│ ├── server/ # HTTP 服务器
│ ├── transfer/ # 传输引擎
│ │ ├── p2p.go # P2P 传输
│ │ ├── http.go # HTTP 传输
│ │ └── webrtc.go # WebRTC 传输
│ ├── storage/ # 存储管理
│ └── crypto/ # 加密模块
├── web/ # 前端界面
│ ├── static/ # 静态文件
│ └── templates/ # 模板文件
├── pkg/ # 公共库
└── configs/ # 配置文件
扩展开发
type CustomTransfer struct {
transfer.BaseTransfer
}
func (c *CustomTransfer) Send(filePath string) error {
return nil
}
transfer.Register("custom", &CustomTransfer{})
🔐 安全特性
1. 传输安全
- TLS 1.3 加密传输
- 端到端加密(P2P 模式)
- 文件哈希校验
- 过期链接自动清理
2. 访问控制
security:
enable_auth: true
users:
- username: admin
password: $2a$10$...
- username: user
password: $2a$10$...
rate_limit: 100
📊 性能优化
1. 并发处理
func (t *Transfer) uploadFile(filePath string) {
chunks := t.splitFile(filePath)
var wg sync.WaitGroup
for i, chunk := range chunks {
wg.Add(1)
go func(idx int, data []byte) {
defer wg.Done()
t.uploadChunk(idx, data)
}(i, chunk)
}
wg.Wait()
}
2. 内存优化
- 流式传输,避免大文件内存占用
- 分块读取,适合大文件
- 内存池复用
🌐 部署方案
1. 单机部署
sudo cp ftg.service /etc/systemd/system/
sudo systemctl enable ftg
sudo systemctl start ftg
2. 集群部署
version: '3'
services:
ftg:
image: filetransfer/go
ports:
- "8080:8080"
volumes:
- ./data:/data
environment:
- FTG_MODE=cluster
- REDIS_URL=redis:6379
redis:
image: redis:alpine
3. 云原生部署
apiVersion: apps/v1
kind: Deployment
metadata:
name: file-transfer
spec:
replicas: 3
template:
spec:
containers:
- name: ftg
image: filetransfer/go
ports:
- containerPort: 8080
📈 监控与日志
1. Prometheus 监控
metrics:
enable: true
path: "/metrics"
2. 日志配置
./ftg serve --log-level info --log-format json
./ftg serve --log-file /var/log/ftg.log --log-max-size 100MB
🔄 与其他工具集成
1. 与 Nginx 集成
# nginx.conf
server {
listen 80;
server_name transfer.yourdomain.com;
location / {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
# 大文件上传优化
client_max_body_size 10G;
proxy_request_buffering off;
}
}
2. 与云存储集成
storage, err := s3.NewS3Storage(S3Config{
Bucket: "my-bucket",
Region: "us-east-1",
})
🎯 使用场景
1. 企业内部文件共享
2. 开发团队
3. 个人使用
📝 注意事项
- 安全提醒:
- 公开部署时务必启用 HTTPS
- 定期清理过期文件
- 限制上传文件类型
- 性能建议:
- 机械硬盘建议分块大小 2-5MB
- SSD 建议分块大小 5-10MB
- 根据网络带宽调整并发数
- 存储管理:
- 设置合理的存储配额
- 定期备份重要文件
- 监控磁盘使用情况
🔗 相关资源
微信扫一扫,关注极客日志
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
相关免费在线工具
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
- Markdown转HTML
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
- HTML转Markdown
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
- JSON 压缩
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
- JSON美化和格式化
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online