Repository navigation
file-server v2.0.0
这是一个破坏性版本:文件服务器的模型从“配置一个 data 目录 + 固定的 files 子目录”改为“直接服务一个目录”,用法接近 python -m http.server 8007。
本版本已重新发布,包含手机端新建文件夹、重命名、删除弹窗无法输入问题的修复。
主要变化
- 直接服务一个目录:默认服务当前工作目录,
file-server.exe 8007即可启动;-d D:\share可指定目录。 - 元数据集中到
.file-server/:config.json、meta.db、上传临时文件tmp/和单实例锁server.lock都放在<服务目录>/.file-server/,不再创建data/files。 .file-server对 Web 端完全隐藏:列表、搜索、下载、上传、重命名、删除均不可访问;直接请求返回403 RESERVED_PATH,符号链接/junction 别名也会被拦截。- 完整命令行参数:端口、监听地址、目录、配置文件、分片大小、上传会话 TTL、审计保留策略、管理 IP、线程、超时、JSON 体积上限、搜索限制都可用命令行覆盖。
- 配置首次运行自动生成:默认写入
<服务目录>/.file-server/config.json,不需要手动准备配置文件。 - 单实例保护:同一服务目录只允许一个
file-server运行,避免上传会话和 SQLite 竞争。 - 启动自动索引:扫描服务目录并跳过
.file-server、符号链接和 junction;运行期间可调用GET /api/resync手动同步。
本次修复
- 新建文件夹、重命名不再使用浏览器原生
prompt(),删除不再使用原生confirm(),全部改为页面内自定义弹窗。 - 弹窗打开时同步聚焦输入框,解决部分手机浏览器/WebView 中“框弹出来了但无法输入、软键盘不弹出”的问题。
- 输入框使用 16px 字号,避免 iOS 聚焦时自动放大页面;支持回车确认、Esc/取消/点遮罩关闭,空名称时禁用确定按钮。
升级说明
data_root配置键已移除,配置文件里出现它会直接报错。- v1 的
data/files内容需要移动到新的服务目录,或使用-d <旧数据目录>/files直接服务旧文件。 - 旧
meta.db不复用;启动时会按新的服务目录重新索引。 - 旧的
config.json不会被默认读取;需要时用-c显式指定,或让程序在新的.file-server/下重新生成。
验证结果
- 单元测试:118 个用例 / 680 条断言,全部通过(Debug 与 Release)。
- 接口 / 集成测试:69 项通过,0 项失败,1 项跳过(磁盘写满用例需要接近写满的卷)。
- 大文件验收:256 MiB 与 4096 MiB 均为 10/10 通过,覆盖上传、强杀、重启、续传、合并与内容校验。
- 手机端验收:Playwright + Edge,390×844 移动视口,新建文件夹 → 重命名 → 删除完整流程通过,输入框聚焦校验通过(Debug 与 Release 均验证)。
- 发布包冒烟:首页包含新弹窗标记,
/.file-server路径返回 403。 - 手工验证:默认目录启动、位置参数端口、自动生成
.file-server、保留路径 403、--check-config无副作用、第二实例被拒绝。
安装包
file-server-2.0.0-win64.zip(Windows x64,静态链接 CRT,无需 VC++ 运行库)- 大小:1,011,476 字节
- SHA-256:
B50127360804DC17DEC63A0C0788D9BC549749A6A58A7606B8E872CB23E6A982 - 压缩包内仅包含
file-server.exe、README.md、LICENSE;配置由程序首次运行自动生成。
安全提醒
本项目没有内置认证,也不提供 HTTPS。默认监听 0.0.0.0:8080,仅适合可信内网;服务目录里的所有文件(包括源码、.env、.git)都可能被下载、修改或删除,请只把需要共享的目录作为服务目录。