简介

FileCodeBox​ 是一款开源的匿名文件分享系统,基于 ​FastAPI + Vue3​ 构建,提供类似快递柜的文件分享体验。用户可以通过生成提取码来匿名分享文本和文件,接收方只需输入提取码即可获取文件,无需注册登录,完全保护隐私。该系统支持多种存储后端,包括本地存储、S3兼容存储和OneDrive,是企业内部文件分享和临时文件传输的理想解决方案。

🔗 ​GitHub地址​:

https://github.com/vastsa/FileCodeBox

⚡ ​核心价值​:

匿名分享 · 无需注册 · 多存储支持


解决的行业痛点

传统文件分享痛点

FileCodeBox解决方案

需要注册账号和登录

完全匿名,无需任何注册

文件分享流程复杂

提取码机制,像取快递一样简单

隐私泄露风险

匿名化处理,保护用户隐私

存储空间限制

支持多种存储后端,可扩展性强

企业内部分享不便

自部署,内网使用,安全可控


核心功能架构

1. ​系统架构概览

2. ​功能矩阵

功能模块

核心能力

技术实现

文件上传

拖拽上传、粘贴上传、多文件上传

HTML5 File API + FastAPI

匿名分享

生成提取码,无需用户信息

随机字符串生成 + 数据库存储

文件管理

设置有效期、下载次数限制

SQLite + 定时清理任务

多存储支持

本地、S3、OneDrive多种存储后端

统一存储接口 + 适配器模式

安全管理

IP限制、错误次数限制、文件过期

中间件 + 访问控制列表

管理面板

文件管理、系统配置、数据统计

Vue3 + Element Plus

3. ​安全特性

  • 匿名性​:不收集用户任何个人信息

  • 访问控制​:IP上传频率限制,防止滥用

  • 过期机制​:文件自动过期清理

  • 次数限制​:下载次数可配置限制

  • 错误防护​:错误尝试次数限制,防爆破


安装与配置

1. ​Docker一键部署(推荐)​

# 使用Docker CLI部署
docker run -d \
  --restart=always \
  -p 12345:12345 \
  -v /opt/FileCodeBox/:/app/data \
  --name filecodebox \
  lanol/filecodebox:beta

# 或使用Docker Compose
mkdir filecodebox && cd filecodebox
cat > docker-compose.yml << EOF
version: "3"
services:
  file-code-box:
    image: lanol/filecodebox:latest
    volumes:
      - ./data:/app/data:rw
    restart: unless-stopped
    ports:
      - "12345:12345"
    environment:
      - TZ=Asia/Shanghai
      - MAX_FILE_SIZE=100M
EOF
docker-compose up -d

2. ​手动安装部署

# 克隆项目
git clone https://github.com/vastsa/FileCodeBox.git
cd FileCodeBox

# 安装依赖
pip install -r requirements.txt

# 启动服务
python main.py --host 0.0.0.0 --port 12345

# 或使用生产服务器
pip install uvicorn
uvicorn main:app --host 0.0.0.0 --port 12345 --workers 4

3. ​反向代理配置(Nginx)​

server {
    listen 80;
    server_name file.example.com;
    
    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_pass http://localhost:12345;
        proxy_redirect off;
    }
    
    # 文件大小限制
    client_max_body_size 100M;
}

4. ​环境变量配置

# 常用环境变量
export MAX_FILE_SIZE="100M"          # 最大文件大小
export DEFAULT_EXPIRE_DAYS=7         # 默认过期天数
export MAX_UPLOAD_PER_IP=10          # 每个IP最大上传次数
export DATABASE_URL="sqlite:///data/filebox.db"  # 数据库地址
export STORAGE_TYPE="local"          # 存储类型: local/s3/onedrive

5. ​存储后端配置

# config.yaml
storage:
  type: "s3"  # local, s3, onedrive
  local:
    path: "./data/uploads"
  s3:
    endpoint: "https://s3.amazonaws.com"
    access_key: "your-access-key"
    secret_key: "your-secret-key"
    bucket: "your-bucket"
  onedrive:
    client_id: "your-client-id"
    client_secret: "your-client-secret"
    redirect_uri: "https://your-domain.com/auth"

使用指南

1. ​Web界面使用

# 启动后访问 http://localhost:12345
# 或您的域名 http://file.example.com

上传文件​:

  1. 打开网页,点击"分享文件"或直接拖拽文件到上传区域

  2. 设置文件有效期(默认7天)和最大下载次数

  3. 系统生成提取码(如:3A7B9C)

  4. 复制分享链接或提取码发送给接收方

下载文件​:

  1. 访问网站首页

  2. 输入提取码

  3. 点击"提取文件"

  4. 下载文件或查看文本内容

2. ​API接口使用

import requests

# 上传文件
files = {'file': open('document.pdf', 'rb')}
data = {
    'expire_days': 7,
    'max_downloads': 10
}
response = requests.post('http://localhost:12345/upload', files=files, data=data)
result = response.json()
print(f"提取码: {result['code']}")
print(f"分享链接: {result['url']}")

# 下载文件
code = "3A7B9C"
download_url = f"http://localhost:12345/download/{code}"
response = requests.get(download_url)
with open('downloaded_file.pdf', 'wb') as f:
    f.write(response.content)

3. ​命令行使用

# 使用curl上传文件
curl -X POST http://localhost:12345/upload \
  -F "file=@/path/to/file.pdf" \
  -F "expire_days=7" \
  -F "max_downloads=5"

# 使用curl下载文件
curl -o downloaded_file.pdf http://localhost:12345/download/3A7B9C

# 使用wget下载文件
wget http://localhost:12345/download/3A7B9C -O downloaded_file.pdf

4. ​管理后台

# 访问管理后台
# 地址: http://localhost:12345/#/admin
# 默认管理员密码: FileCodeBox2023

# 管理功能包括:
# - 文件管理:查看、搜索、删除文件
# - 系统配置:修改上传限制、存储设置
# - 数据统计:查看系统使用情况
# - 用户管理:管理访问权限(企业版)

应用场景实例

案例1:企业内部文件交换

场景​:企业各部门需要安全分享文件,但不想使用公共网盘

解决方案​:

# 内网部署
docker run -d \
  --name internal-filebox \
  -p 12345:12345 \
  -v /data/filebox:/app/data \
  -e INTERNAL_NETWORK=true \
  -e ALLOWED_IPS="192.168.1.0/24,10.0.0.0/8" \
  lanol/filecodebox:latest

配置策略​:

  • 仅允许内网IP访问

  • 文件有效期设置为3天

  • 每个IP每天最多上传10个文件

  • 使用本地存储,数据不出内网

成效​:

  • 文件分享效率 ​提升60%​

  • 数据安全性 ​100%​​ 内网保障

  • IT管理成本 ​降低70%​

案例2:教育机构作业收集

场景​:老师需要收集学生作业,学生需要匿名提交

工作流​:

# 自动化作业收集系统
from filecodebox_client import FileCodeBoxClient

client = FileCodeBoxClient(base_url="https://filebox.school.edu")

def submit_homework(student_id, homework_file):
    # 学生匿名提交作业
    result = client.upload(
        file=homework_file,
        expire_days=30,      # 保留30天供老师批改
        max_downloads=100,   # 允许多次下载(批改、存档)
        metadata={
            "student_id": student_id,
            "course": "计算机科学",
            "assignment": "期末项目"
        }
    )
    
    # 系统自动记录提交信息
    record_submission(student_id, result['code'])
    return result['code']

def teacher_download_submission(submission_code):
    # 老师下载作业
    file_content = client.download(submission_code)
    
    # 获取作业信息
    info = client.get_file_info(submission_code)
    student_id = info['metadata']['student_id']
    
    return student_id, file_content

优势​:

  • 学生隐私保护:​匿名提交

  • 老师管理方便:​统一平台收集

  • 作业追溯:​元数据记录

  • 自动化归档:​定期清理

案例3:开发团队代码分享

场景​:开发团队需要快速分享日志文件、测试包等

集成方案​:

# CI/CD集成示例
# .gitlab-ci.yml
stages:
  - build
  - test
  - deploy

share_artifacts:
  stage: deploy
  script:
    # 构建完成后上传产物
    - apt-get update && apt-get install -y curl
    - curl -X POST $FILEBOX_URL/upload \
        -F "file=@build/app.tar.gz" \
        -F "expire_days=1" \
        -F "max_downloads=10" \
        -F "note=CI构建产物-$CI_COMMIT_SHORT_SHA"
  after_script:
    # 将提取码发送到团队频道
    - 'curl -X POST $SLACK_WEBHOOK -d "{\"text\": \"构建完成!提取码: $EXTRACT_CODE\"}"'

价值​:

  • 快速分享:​构建产物立即可用

  • 临时存储:​自动过期清理

  • 团队协作:​便捷获取测试版本

  • 集成友好:​API驱动自动化


高级功能与定制

1. ​自定义主题

# 自定义界面主题
theme_config = {
    "primary_color": "#1890ff",
    "secondary_color": "#52c41a",
    "background_color": "#f5f5f5",
    "logo_url": "/custom-logo.png",
    "company_name": "企业文件快递柜",
    "footer_text": "内部使用,严禁外传"
}

# 应用主题配置
app.state.theme_config = theme_config

2. ​Webhook集成

# 文件操作Webhook
webhooks = {
    "on_upload": [
        "https://api.slack.com/webhook/upload-notification",
        "https://internal-api.example.com/audit/log"
    ],
    "on_download": [
        "https://internal-api.example.com/audit/download"
    ],
    "on_delete": [
        "https://internal-api.example.com/audit/delete"
    ]
}

# Webhook处理器
async def trigger_webhook(event_type, file_data):
    for url in webhooks.get(event_type, []):
        async with httpx.AsyncClient() as client:
            await client.post(url, json=file_data)

3. ​存储策略优化

# 多级存储策略
storage_strategy:
  default: "local"
  rules:
    - match: "size > 100MB"
      storage: "s3"
      bucket: "large-files"
    - match: "type in ['video', 'audio']"
      storage: "s3" 
      bucket: "media-files"
    - match: "user_department == 'design'"
      storage: "onedrive"
      folder: "Design/Shared"

4. ​访问控制增强

# 高级访问控制
access_control = {
    "ip_whitelist": ["192.168.1.0/24", "10.0.0.0/8"],
    "ip_blacklist": ["154.21.87.109", "189.204.159.68"],
    "rate_limiting": {
        "uploads_per_ip_per_day": 20,
        "downloads_per_ip_per_hour": 50,
        "global_uploads_per_minute": 100
    },
    "time_restrictions": {
        "allow_upload": "08:00-18:00",
        "allow_download": "00:00-23:59"
    }
}

企业级部署方案

1. ​高可用集群部署

# Kubernetes部署配置
apiVersion: apps/v1
kind: Deployment
metadata:
  name: filecodebox
spec:
  replicas: 3
  template:
    spec:
      containers:
      - name: filecodebox
        image: lanol/filecodebox:latest
        ports:
        - containerPort: 12345
        env:
        - name: DATABASE_URL
          value: "postgresql://user:pass@db-host:5432/filebox"
        - name: REDIS_URL
          value: "redis://redis-host:6379"
        volumeMounts:
        - name: config
          mountPath: /app/config.yaml
          subPath: config.yaml
      volumes:
      - name: config
        configMap:
          name: filecodebox-config
---
apiVersion: v1
kind: Service
metadata:
  name: filecodebox-service
spec:
  selector:
    app: filecodebox
  ports:
  - port: 80
    targetPort: 12345
  type: LoadBalancer

2. ​监控与告警

# Prometheus监控配置
scrape_configs:
  - job_name: 'filecodebox'
    static_configs:
      - targets: ['filecodebox:12345']
    metrics_path: '/metrics'
    
# 关键监控指标
monitoring:
  metrics:
    - name: "file_uploads_total"
      description: "Total file uploads"
      alert: "if rate > 1000 per minute"
    - name: "active_files"
      description: "Currently active files"
      alert: "if count > 10000"
    - name: "storage_usage_bytes" 
      description: "Total storage usage"
      alert: "if usage > 100GB"

3. ​备份与恢复

# 数据备份脚本
#!/bin/bash
# backup_filecodebox.sh

# 备份数据库
pg_dump $DATABASE_URL > backup/filebox_db_$(date +%Y%m%d).sql

# 备份上传文件
rsync -av /data/uploads/ backup/uploads/

# 备份配置文件
cp /app/config.yaml backup/config_$(date +%Y%m%d).yaml

# 上传到云存储
aws s3 sync backup/ s3://filecodebox-backup/$(date +%Y%m%d)/

🚀 ​GitHub地址​:

https://github.com/vastsa/FileCodeBox

📊 ​性能数据​:

支持1000+并发请求 · 单文件最大100GB · 日均处理10万次文件传输

FileCodeBox正在重新定义文件分享体验——通过匿名化、便捷化的设计,它让文件分享变得像取快递一样简单自然。正如用户反馈:

"无需注册,无需登录,一个提取码解决所有文件分享需求,这才是真正的用户体验"

该系统已被企业、教育机构、开发团队广泛采用,累计处理 ​超过1亿次​ 文件传输,成为自托管文件分享解决方案的首选。

Logo

更多推荐