1. 项目概述:告别数据线的局域网文件传输方案
每次在办公室需要给同事传文件时,你是不是还在满桌子找数据线?或者为了发个20MB的文档不得不登录微信?作为一个经常需要在多台设备间传输文件的开发者,我花了周末时间用FastAPI搭建了一个轻量级的局域网文件共享工具,现在可以完全摆脱数据线和第三方工具的束缚。
这个工具的核心功能非常简单:
- 在局域网内的任意设备间快速传输文件(支持大文件)
- 实时同步剪贴板内容(文字、图片)
- 零配置开箱即用
- 完全基于浏览器操作,无需安装客户端
实测下来,传输速度能达到局域网满速(千兆环境下约100MB/s),比微信文件传输快了近10倍。最棒的是,整个项目不到200行Python代码,用FastAPI实现起来异常简单。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术选型与架构设计
2.1 为什么选择FastAPI?
在评估了Flask、Django和FastAPI后,我最终选择了FastAPI作为后端框架,主要基于以下考虑:
-
性能优势:FastAPI基于Starlette和Pydantic,异步特性使其在处理文件上传下载时性能显著优于传统框架。在本地测试中,FastAPI处理文件请求的吞吐量是Flask的3倍左右。
-
开发效率:FastAPI的自动交互式文档、类型提示和请求验证让开发过程非常流畅。比如文件上传接口只需要这样定义:
python复制from fastapi import FastAPI, UploadFile, File
app = FastAPI()
@app.post("/upload")
async def upload_file(file: UploadFile = File(...)):
return {"filename": file.filename}
- 现代特性:原生支持WebSocket,为后续实现实时通知功能(如下载完成提醒)留出了扩展空间。
2.2 整体架构设计
工具的核心架构分为三个层次:
-
前端层:纯HTML+JavaScript实现,利用浏览器File API处理文件选择,通过Fetch API与后端交互。这样就不需要开发原生客户端。
-
服务层:FastAPI提供RESTful接口处理文件上传下载,以及WebSocket服务管理剪贴板同步。
-
存储层:临时文件存储在内存中(小文件)或磁盘临时目录(大文件),定期清理过期文件。
关键的技术栈组合:
- 前端:Vanilla JS + FileReader API
- 后端:FastAPI + Uvicorn
- 传输协议:HTTP/WebSocket
- 文件处理:Python标准库shutil
3. 核心功能实现细节
3.1 文件传输服务实现
文件上传的核心逻辑在/upload端点实现,这里有几个关键点需要注意:
python复制from fastapi import FastAPI, UploadFile, File
from fastapi.staticfiles import StaticFiles
import os
import shutil
from pathlib import Path
app = FastAPI()
UPLOAD_DIR = Path("uploads")
UPLOAD_DIR.mkdir(exist_ok=True)
@app.post("/upload")
async def upload_file(file: UploadFile = File(...)):
try:
# 安全处理文件名
safe_name = "".join(c for c in file.filenam
