features
开箱即用的目录服务,以及正确的 HTTP 语义。
目录列表
12 类文件图标、名称/大小/时间/类型四维排序、面包屑导航、隐藏文件开关。
预览与高亮
代码语法高亮、Markdown/Org 渲染、图片/音视频预览,Preview / Raw / Download 三种视图。
Range 请求 RFC 9110
真正的字节切片(seek + take),支持后缀范围,无效范围返回 416。断点续传、媒体拖动均可用。
缓存与 304
ETag + If-None-Match(含弱比较与 *)、If-Modified-Since,命中即 304,省流量。
压缩与 CORS
gzip / deflate / brotli 自动协商;CORS 默认放开 GET/HEAD,方便跨域调试。
安全
路径穿越钳制、符号链接逃逸防御(canonicalize 校验)、RFC 5987 文件名编码、零 unwrap 生产代码。
quickstart
三秒钟,把任意目录变成 HTTP 服务。
# 安装 $ cargo install d # 服务当前目录 $ d INFO Starting server on http://localhost:8080 # 指定目录与端口 $ d -r ./public -p 3000 # 断点续传 / 部分下载 $ curl -r 0-1023 http://localhost:8080/data.bin
examples
仓库内置 5 组可运行示范(examples/),覆盖各种文件类型。
| 目录 | 演示内容 | 启动命令 |
|---|---|---|
demo/ | 综合演示:列表、排序、各类型预览 | d -r examples/demo |
code/ | 多语言语法高亮(Py/JS/Go/Shell/SQL) | d -r examples/code |
docs/ | 文档预览(Markdown/Org/TXT/CSV) | d -r examples/docs |
media/ | 图片预览(SVG) | d -r examples/media |
static-site/ | 静态网站(HTML+CSS+JS) | d -r examples/static-site |
quality
每个阶段都遵循「开发 → 测试 → 验收」循环。
51 个自动化测试
26 单元 + 25 集成(oneshot 方式,无需真实端口),覆盖 Range/304/安全/列表全部关键路径。
验收脚本
scripts/acceptance.sh:构建 + 真实启动 + 22 项端到端 HTTP 行为检查,失败即非零退出。
CI
GitHub Actions 双平台(ubuntu / macOS)矩阵:fmt + clippy(零警告)+ test。
roadmap
从目录服务到轻量 NGINX。
Phase 0 — 技术还债 ✔ done
模块化拆分、Range/304 修复、符号链接防御、SIGTERM、依赖瘦身、测试基座与 CI。
Phase 1 — 目录服务打磨 ▶ next
index.html 自动服务、目录打包下载(zip/tar.gz)、Basic Auth、访问日志、TLS(手动证书)、前端资源内嵌。
Phase 2 — 轻量 NGINX 模式 planned
TOML 配置文件、虚拟主机、反向代理 + 轮询负载均衡(hyper 自研)、SIGHUP 热重载。
Phase 3 — 写操作(可选) evaluating
上传 / WebDAV / 在线编辑,届时根据实际需求评审。