跳转至

多格式文件预览:方案总览与选型

时间:2026-05 · 调研范围:GitHub 开源项目、官方文档、社区博客与 Discussion


1. 需求定义

1.1 预览 vs 编辑

能力 本次优先级 说明
在线预览 P0 浏览器内查看附件,无需下载
在线编辑 P2 OnlyOffice/Collabora 范畴,资源占用高
格式转换 P1 Office → PDF/图片,由预览服务完成
与 Git 同步 P0 附件随 Gitea 仓库存储,预览服务只读访问

1.2 格式矩阵(按常见度)

类别 典型后缀 个人知识库出现频率
文档 md, txt, pdf 极高
Office docx, xlsx, pptx 高(调研材料、复盘)
图片 png, jpg, webp, svg
代码 py, js, json, yaml
音视频 mp4, mp3
压缩包 zip, rar, 7z
专业 dwg, xmind, drawio, epub 低但「有则要有」

2. 方案分层

flowchart TB
    subgraph L1["L1 独立预览服务"]
        KK[kkFileView]
        OO[OnlyOffice DS]
        CO[Collabora CODE]
    end
    subgraph L2["L2 文件管理 + 预览"]
        AL[AList]
        FB[File Browser]
    end
    subgraph L3["L3 站点 / 前端嵌入"]
        MK[MkDocs 插件]
        VO[vue-office 等组件]
    end
    subgraph L4["L4 现有能力"]
        GT[Gitea 原生]
        MD[MkDocs 静态页]
    end

    AL -->|iframe 接入| KK
    MK -->|Office 外链| KK
    MK -->|PDF 内嵌| MK

3. 方案对比总表

方案 Stars* 部署难度 2C4G 可行 格式覆盖 预览质量 与 Gitea/MkDocs 集成 推荐度
kkFileView ~12k+ 低(Docker) ✅ 可行 ⭐⭐⭐⭐⭐ 中高(LibreOffice 转换) REST URL 接入 ⭐⭐⭐⭐⭐
AList ~49k+ ⭐⭐⭐(基础)+ 可扩展 独立子域或 WebDAV ⭐⭐⭐⭐
AList + kkFileView ⭐⭐⭐⭐⭐ 中高 iframe 配置 ⭐⭐⭐⭐⭐
File Browser ~34k+ 极低 ⭐⭐ 低(基础) 独立服务 ⭐⭐⭐
vue-office ~5.5k+ 需开发 ✅(无服务端) ⭐⭐⭐(Office+PDF) 中高(前端解析) 需自写页面 ⭐⭐⭐
vue-files-preview ~130 需开发 ⭐⭐⭐⭐ 需自写页面 ⭐⭐⭐
OnlyOffice DS ⚠️ 紧张 ⭐⭐⭐⭐ WOPI/iframe ⭐⭐(预览专用不划算)
Collabora CODE ⚠️ ~1.3G 基线内存 ⭐⭐⭐⭐ WOPI + Nextcloud 常见 ⭐⭐
MkDocs mkdocs-pdf 极低 PDF only 高(浏览器原生) 构建时嵌入 ⭐⭐⭐⭐(PDF)
Gitea 内置 已有 ⭐⭐(仅 raw/图片)

* Stars 为 2026-05 公开数据量级,随时间变化。


4. 重点方案详解

4.1 kkFileView(首选:万能预览服务)

  • 仓库:https://github.com/kekingcn/kkFileView
  • 官网/文档:https://kkview.cn
  • 协议:Apache-2.0
  • 架构:Spring Boot + LibreOffice/OpenOffice 转码 + 多种前端渲染器

支持格式(摘录)

  • Office:doc/docx/xls/xlsx/ppt/pptx、WPS、OpenDocument
  • 文档:pdf、ofd、rtf、epub、eml
  • 文本:md(渲染)、代码、json、xml
  • 媒体:图片、音视频(转码预览)
  • 其他:zip 目录树、CAD、3D、xmind、bpmn、drawio、dcm 等

接入方式

预览 URL = https://preview.example.com/onlinePreview?url={Base64(文件下载地址)}
  • 文件须可被预览服务 HTTP/HTTPS 访问(Gitea raw、Nginx 静态目录、AList 直链均可)
  • 无后缀的下载流需加 fullfilename=xxx.docx

资源占用(经验值)

估算
内存 512MB~1.5GB(含 LibreOffice 进程)
磁盘 镜像 + 转换缓存,建议 ≥5GB
CPU Office 首次转换时 spike,平时低

优点:格式最全、Docker 成熟、国内社区大、AList 有现成集成讨论
缺点:旧版 .doc/.ppt 兼容性一般;LibreOffice 转换大文件慢;需维护转换进程

参考博客


4.2 AList(文件列表 + 可扩展预览)

  • 仓库:https://github.com/AlistGo/alist
  • 文档:https://alistgo.com/zh/config/preview.html

内置预览

  • PDF、Markdown、代码、纯文本、图片、音视频
  • Office 默认可走 Microsoft Office Onlineview.officeapps.live.com)→ 依赖外网 + 域名 80/443 + 文件大小限制(Word/PPT <10MB,Excel <5MB)

自建 Office 预览(推荐配置)

在「预览 → iframe 预览」中接入 kkFileView:

{
  "doc,docx,xls,xlsx,ppt,pptx": {
    "kkFileView": "https://preview.example.com/onlinePreview?url=$b_url"
  },
  "pdf": {
    "kkFileView": "https://preview.example.com/onlinePreview?url=$b_url"
  }
}

社区方案:AList Discussion #3908

优点:多存储挂载、WebDAV、UI 完整、49k+ stars
缺点:单靠内置 Office 预览不满足「完全本地」;与知识库「写作流」是平行入口


4.3 vue-office / vue-files-preview(前端组件)

项目 链接 特点
vue-office https://github.com/501351981/vue-office docx/xlsx/pdf/pptx,~5.5k stars,可 CDN 引入
vue-files-preview https://github.com/VueFilesPreview/vue-files-preview 聚合 docx/xlsx/pptx/pdf/md/代码/音视频

适用:自建一个「附件预览页」,从 Gitea raw URL 或 API 拉文件到浏览器解析。
局限

  • 无 CAD、压缩包、旧 Office 等
  • pptx 完整能力可能依赖作者付费组件
  • 大 Excel 性能依赖前端算力

优点:零 LibreOffice、纯静态可部署
缺点:需开发;格式覆盖远小于 kkFileView


4.4 OnlyOffice / Collabora(在线 Office 套件)

对比项 OnlyOffice Document Server Collabora CODE
定位 编辑 + 预览 编辑 + 预览
内存基线 ~500MB(宣传)/ 实际部署常更高 ~1.3GB+
部署 Docker 可用但组件多 单容器相对简单
预览接入 WOPI、iframe WOPI
2C4G VPS 与 Gitea+MkDocs+Memos 同机 偏紧 同机 更紧

结论:若目标仅是「只读预览」,在 2C4G 上不优先;kkFileView 更合适。
若未来 v2 需要「浏览器内改 docx」,再单独立项评估 OnlyOffice。

参考


4.5 MkDocs 侧能力(与现有只读站结合)

插件/能力 作用 格式
mkdocs-pdf Markdown 内嵌 PDF iframe pdf
mkdocs-embed-file 嵌入笔记片段 / wikilink md
自定义 HTML 链接到 kkFileView 预览页 任意(跳转)

MkDocs 不能原生渲染 docx/xlsx;Office 需外链预览服务或预转换为 PDF。


4.6 File Browser

  • 仓库:https://github.com/filebrowser/filebrowser
  • 特点:单二进制、Go 编写、上传/管理/基础预览
  • 预览:图片/文本/PDF 等基础能力,不如 kkFileView 全
  • 状态:维护模式(官方说明以维护为主)
  • 结论:适合「轻量网盘」,不适合作为多格式预览核心

5. 选型决策树

需要预览 Office/CAD/压缩包等「冷门格式」?
├─ 是 → kkFileView(Docker)
└─ 否 → 只需 PDF/MD/图片?
    ├─ 是 → MkDocs 内嵌 + Gitea raw 即可
    └─ 否 → 还要网盘式浏览附件?
        ├─ 是 → AList + kkFileView iframe
        └─ 否 → vue-office 自建轻量预览页

6. 针对个人知识库的推荐组合

方案 A:最小可行(推荐先做)

kkFileView 单服务 + Gitea/MkDocs 链接跳转

  • 新增子域 preview.teacherhome.top(示例)
  • Docker 跑 kkFileView,Nginx 反代
  • MkDocs 笔记里对附件写:[预览 PDF](https://preview.../onlinePreview?url=...)
  • 资源:+512MB~1GB 内存

方案 B:附件库体验完整

方案 A + AList

  • AList 挂载 /data/attachments 或 Gitea 仓内 assets/
  • iframe 预览走 kkFileView
  • 适合 PDF/Office/压缩包混放的「03-素材库」

方案 C:站点内 PDF 无跳转

MkDocs mkdocs-pdf + 方案 A

  • PDF 在 notes 站内 iframe 嵌入
  • Office 仍跳 kkFileView

7. 风险与规避

风险 影响 规避
LibreOffice 转换超时 大 PPT/CAD 失败 调大 kkFileView 超时;大文件建议本地转 PDF 再入库
预览 URL 泄露 未授权访问附件 Nginx 鉴权 / 内网 Tailscale / 签名 URL
微软在线预览依赖外网 国内不稳定 禁用 Microsoft 预览,只用 kkFileView
VPS 内存不足 OOM 限制 kkFileView 并发;转换缓存定期清理
二进制进 Git 仓体积膨胀 clone 变慢 大文件放 LFS 或独立 attachments 目录 + AList

8. 下一步

详见 落地建议/与个人知识库集成路径.md

  1. Docker Compose 草案(kkFileView + Nginx)
  2. Gitea raw URL → 预览 URL 拼接规则
  3. MkDocs 附件链接模板
  4. 分阶段验收清单