在线协作文档编辑:kkFileView + OnlyOffice 实时编辑实操
【免费下载链接】kkFileViewUniversal File Online Preview Project based on Spring-Boot项目地址: https://gitcode.com/GitHub_Trending/kk/kkFileView
需要让多人同时改同一份文档时,靠邮件来回传文件已经不够用了。本文用 kkFileView 托管文件与预览,接入开源办公套件 OnlyOffice,让文档在浏览器里直接打开编辑、改动实时同步。看完你能在本地跑通一条协作编辑链路。
为什么是这个组合
- 你把文档发出去改,等收回来发现两人各改了一份,版本对不上。
- 你在 kkFileView 里预览没问题,可要改一行字,得下载、编辑、再上传一遍。
- 你图省事接了第三方协作服务,文档却存在别人服务器上,合规过不去。
两个组件各管一段:
- kkFileView(基于 Spring Boot 的通用文件在线预览项目):负责文件托管、预览和对外提供访问地址,原生支持 20 多个格式大类。
- OnlyOffice Document Server(开源办公套件的文档服务器,下称 Document Server):负责浏览器里的实时协同编辑。
衔接方式一句话:kkFileView 把文件暴露成 HTTP 地址,这个地址填进 OnlyOffice 编辑器的配置里,编辑器拉取文件、渲染编辑界面,保存时回传结果。全程数据都在你自己的服务器。
| 场景 | 仅 kkFileView | 接入 OnlyOffice 后 |
|---|---|---|
| 查看文档 | 支持 | 支持 |
| 编辑文档 | 下载改完再传 | 浏览器直接改 |
| 多人同时改 | 不支持 | 光标与内容实时同步 |
动手前:环境自检
| 依赖 | 最低 | 推荐 |
|---|---|---|
| CPU | 双核 | 四核 |
| 内存 | 4 GB | 8 GB |
| JDK | 21(5.0.0 版本硬性要求) | 21 |
| 容器运行时 | Docker | Docker + Compose |
| 端口 | 8012(kkFileView)、8081(OnlyOffice) | 同左 |
获取代码并自检:
git clone https://gitcode.com/GitHub_Trending/kk/kkFileView java -version # 需要 21 及以上 docker --version📌 注意:如果你手上的旧环境还是 JDK 8,升级前先换 JDK,否则项目直接起不来。
实操:从配置到跑通
第 1 步:构建并启动 kkFileView,验证预览
目标:让一个文件能通过 HTTP 地址访问到。
cd kkFileView mvn clean package -DskipTests java -jar server/target/kkFileView-*.jar验证点:浏览器打开http://localhost:8012/能加载首页;把一个测试文件放进应用根目录的file/下,再访问http://localhost:8012/<相对路径>/demo.docx能看到文件内容。
易卡点:首页上传默认是关闭的(file.upload.disable=true),把文件直接放进file/目录即可,不必走上传。
第 2 步:部署 OnlyOffice Document Server
目标:在 8081 端口有一个可用的编辑引擎。
docker run -i -t -d -p 8081:80 --name oo-ds onlyoffice/documentserver验证点:
curl http://localhost:8081/healthcheck # 返回 OK易卡点:容器首次启动初始化需要一两分钟,期间 healthcheck 会拒绝连接,等一等再试。
第 3 步:写编辑器页面,把文件地址指向 kkFileView
目标:浏览器渲染出编辑界面,且文档来源是 kkFileView 的地址。
在你自己的任意 Web 目录下建edit.html,引用 Document Server 的 api.js(api.js 是 OnlyOffice 官方前端编辑器脚本):
<script src="http://localhost:8081/web-apps/apps/api/documents/api.js"></script> <div id="placeholder" style="height:100%"></div> <script> var config = { document: { url: "http://<服务器IP>:8012/uploads/demo.docx", title: "demo.docx", fileType: "docx" }, documentType: "word", editorConfig: { lang: "zh-CN" }, callbackUrl: "http://<服务器IP>:8082/onlyoffice/callback", events: new DocsAPI.DocEditor("placeholder", { onAppReady: renderEditor }) }; </script>关键就一行:document.url必须填容器能访问到的地址,跨机器时用服务器 IP,别写 localhost。callbackUrl是保存时 Document Server 回调你后端的接口;初跑阶段可以先不管它,用编辑器自带"下载"按钮把编辑后的文件取回来。
验证点:打开 edit.html,出现带完整工具栏的 Word 编辑界面,且文档正文成功从 kkFileView 加载出来。
易卡点:编辑器跑在浏览器里,文件却从容器侧拉取,浏览器和容器必须都能通那个地址,两边不通是最高频的错误源。
第 4 步:验证多人实时协作
目标:确认"实时"是真的。
用两个浏览器窗口(其中一个用无痕窗口)打开同一个 edit.html。
验证点:在 A 窗口敲字,B 窗口几乎同步出现这些字,页面右上角出现在线成员头像,说明协作链路打通。
易卡点:如果两个窗口都只显示一个人在线,检查两边打开的document.url是否完全一致。
跑不通时看这里
编辑器提示文件下载失败(File download error)→ 原因:Document Server 容器访问不到document.url的地址,最常见是填了 localhost。 → 解法:换成容器能路由到的服务器 IP,改完刷新页面重试。
能编辑,但改动没有保存→ 原因:callbackUrl不可达或后端没实现回调处理。 → 解法:先用编辑器"下载"手动取结果;正式使用再实现回调接口(Document Server 保存后会携带可下载文件地址回调该接口)。
提示 JWT 校验或 token 错误→ 原因:local.json里配置的jwt.secret与编辑器签名用的密钥不一致。 → 解法:两处配置成完全相同的字符串,改完容器内配置后重启容器。
kkFileView 打开后看不到文件、页面空白→ 原因:默认禁用了上传,file/目录下又没有文件。 → 解法:把文件放进file/目录按相对路径访问,或在 application.properties 里把file.upload.disable设为false。
转换出的文档中文变成方块→ 原因:容器内缺中文字体。 → 解法:把 Noto Sans CJK 一类字体挂载进容器的字体目录,重启容器。
进阶可选
- 在 Document Server 的
local.json中启用jwt并设置secret,编辑器侧用同一密钥签名,防止文档地址被伪造拼进别人的编辑器。 - 在 配置文件 中加
kk.xlsxallowedit=true,让 kkFileView 自身开启 xlsx 前端编辑,适合单人轻量改动、不依赖 Document Server 的场景。 - 用 Docker Compose 把 kkFileView 与 Document Server 一起编排,固定 8012/8081 端口与挂载路径,重启后可复现。
小结
- kkFileView(开源,Spring Boot)负责文件托管与预览,覆盖 20 多个格式大类,默认端口 8012。
- OnlyOffice Document Server 社区版负责协同编辑,默认映射端口 8081,同样开源。
- 两者之间只隔一份编辑器配置,文件全程不出内网。
- 回调写回是最后要补齐的一环,接上它编辑结果才会自动落盘。
编辑器能打开只是第一步,下一步是实现回调保存服务和多人权限控制,那是另一个可以单独展开的主题。
【免费下载链接】kkFileViewUniversal File Online Preview Project based on Spring-Boot项目地址: https://gitcode.com/GitHub_Trending/kk/kkFileView
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考