ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

从上传下载到在线协同:学校如何为作业系统接入 Word 在线编辑与批改

从上传下载到在线协同:学校如何为作业系统接入 Word 在线编辑与批改 从上传下载到在线协同学校如何为作业系统接入 Word 在线编辑与批改一份 Word 作业通常要在老师和学生的电脑之间跑好几趟。老师上传模板学生下载、填写、再上传老师把作业下载到本地用批注和修订改完然后再发回去。学生少时还能应付一个班几十份文件堆起来“最新版”“最新版1”“最终版”就开始抢戏了。文件名难看还算小事。批改记录在多个文档中学生看不到前后变化老师还得反复确认自己打开的是哪一份。这是非常耗费老师与学生精力的事。南京大学 e-Science 中心遇到过类似问题。过去老师需要下载学生作业本地评阅完再上传学生数量一多就容易出错。他们将 ONLYOFFICE 文档接入协同表格工具后老师可以在线查看、评阅和打分。摘要本文面向学校作业系统演示如何接入 ONLYOFFICE 文档实现 Word 在线编辑与批改。文章先厘清 Document Server 与作业系统的分工再在 Mac 上通过 Docker 部署 ONLYOFFICE Document Server随后用 Node.js 和 Express 编写一个极简作业系统实现 DOCX 上传、编辑器嵌入、保存回调与历史版本。最后以学生和教师两个身份跑通全流程并给出学校本地部署与教育优惠的落地建议。全文从一份作业出发把“下载、本地改、再上传”变成“打开、在线批改、保留版本”。这篇文章直接动手。我们在一台 Mac 上部署 ONLYOFFICE Document Server再用 Node.js 写一个极简作业系统跑通 Word 在线打开、编辑、保存和教师批改一、接入在线编辑器不等于把 Word 文件扔给另一台服务器先把分工说清楚才能更好理解后面的代码与整体流程。ONLYOFFICE 文档 是一套可以集成到 Web 应用中的在线办公套件能在浏览器里查看和编辑文本文档、电子表格、演示文稿、PDF 和可填写表单。放到作业系统里我们主要用它的Word 在线编辑、多人协作、批注、修订和版本历史。Document Server 是一套在线文档编辑与处理服务。它提供编辑器界面处理格式、协同编辑和保存通知。学校仍然要用原有系统管理课程、学生、作业和成绩。原始 Word 存在哪里谁能打开哪一份算学生的最新提交这些也由作业系统决定。ONLYOFFICE 官方对这套架构的划分很明确。编辑器、编辑服务、命令服务和转换服务由 ONLYOFFICE 文档提供文档管理器与文档存储服务由集成方提供。一次完整编辑大致会走这条路线。学生或教师的浏览器 │ ├── 打开作业页面 └── 加载 Word 在线编辑器 │ ▼ ONLYOFFICE Document Server ├── 从作业系统获取原始 Word ├── 处理编辑、批注和协作 └── 编辑完成后发送保存回调 │ ▼ 作业系统后端 ├── 生成编辑器配置与 JWT ├── 管理用户和文件权限 └── 接收编辑结果并生成新版本页面端要加载 Document Server 提供的api.js然后拿作业系统后端签发的config初始化编辑器。编辑完成后Document Server 会调用callbackUrl作业系统再把新文件下载回自己的存储。弄懂这一点后面就非常好理解了。二、在Mac上跑起 Document Server这次的演示环境是arm64架构的 Mac。可以先在终端确认一下。uname-m如果输出arm64就是 Apple 芯片。先安装并启动 Docker Desktop for Mac再在终端执行下面的命令。dockerrun-d\--nameonlyoffice-documentserver\-p8080:80\--restartunless-stopped\-eJWT_ENABLEDtrue\-eJWT_SECRETonlyoffice-demo-secret\-eALLOW_PRIVATE_IP_ADDRESStrue\onlyoffice/documentserver:latestONLYOFFICE 官方的 ARM64 Docker 安装文档 显示社区版 7.2 及以后版本可以在 64 位 ARM 架构上通过onlyoffice/documentserver镜像部署。建议至少准备 4 GB 内存与 40 GB 可用磁盘空间。镜像不小第一次拉取别急。这条命令不长但要注意这三个参数要不之后麻烦重重。8080:80把容器的 80 端口映射到 Mac 的 8080 端口。JWT_SECRET是 Document Server 与作业系统共享的签名密钥两边必须完全一致。特别提醒不主动设置密钥时服务重启可能会重新生成随机值集成就会突然失败。ALLOW_PRIVATE_IP_ADDRESStrue是本地演示专用设置因为稍后 Document Server 需要访问 Mac 上的作业系统。正式环境不应照抄这个开关而应使用 HTTPS、受控域名和明确的网络访问策略。拉取完就能在Docker Desktop中看到运行情况。容器启动后先看状态。dockerpscurlhttp://localhost:8080/healthcheck健康检查返回true再用浏览器打开http://localhost:8080。能看到 ONLYOFFICE Document Server 的欢迎页这一步就算完成。三、写一个作业系统演示系统用 Node.js 和 Express 来写。本次不做完整的教务平台主要目标还是讲清楚 ONLYOFFICE 的接入方式。如果你也想尝试一下可以直接联系我发你源码系统功能如下DOCX 上传与文件列表一个 Word 编辑页学生和教师两个模拟身份每份文件独立的下载与编辑配置接口保存回调与历史版本目录如下onlyoffice-homework-demo/ ├── app.js ├── server.js ├── lib/ │ ├── documents.js │ └── onlyoffice.js ├── views/ ├── public/ └── storage/documents/ └── 文件 ID/ ├── current.docx ├── metadata.json └── versions/初始化项目并安装依赖。mkdironlyoffice-homework-democdonlyoffice-homework-demonpminit-ynpminstallexpress ejs jsonwebtoken multer运行命令JWT_SECRETonlyoffice-demo-secretnpmstart首页通过multipart/form-data接收 DOCX。后端不直接拿用户上传的文件名拼接路径而是为每份文件生成随机 ID原文件名只负责展示。这样即使两名学生都上传“实验报告.docx”文件也不会互相覆盖。app.post(/files,upload.single(document),async(req,res){constdocumentawaitcreateDocument({bytes:req.file.buffer,originalName:req.file.originalname,rootDir});res.redirect(/?uploaded${document.id});});app.get(/files/:documentId/download,async(req,res){constdocumentawaitgetDocument({documentId:req.params.documentId,rootDir});res.download(document.currentFilePath,document.originalName);});演示代码只接收.docx限制单文件 20 MB并检查 DOCX 的 ZIP 文件头。正式系统还应增加登录鉴权、课程权限、病毒扫描、配额和审计。这里的文件暂存在本机磁盘换成对象存储时页面和 ONLYOFFICE 配置不用推倒重写只需替换文件存储层。这里最容易卡住。Document Server 运行在 Docker 容器里它看到的localhost指向容器自己。Mac 主机在另一边。传给 Document Server 的文件地址和回调地址需要使用 Docker Desktop 提供的host.docker.internal。conststorageBaseUrlhttp://host.docker.internal:3000;constdocumentUrl${storageBaseUrl}/files/${document.id}/download;constcallbackUrl${storageBaseUrl}/api/files/${document.id}/onlyoffice/callback;只要把这两个地址写成http://localhost:3000页面很可能会出现“下载失败”或“无法保存”。代码看着没问题网络关系却反了。四、把 Word 编辑器嵌入作业页面因为文档地址、用户身份、编辑权限和 JWT 签名都不该交给浏览器随意修改所以编辑器的config由作业系统后端配置。下面是简化后的配置生成函数。importcryptofromnode:crypto;importjwtfromjsonwebtoken;functioncreateEditorConfig({documentUrl,callbackUrl,user,version}){constkeycrypto.createHash(sha256).update(homework.docx:${version}).digest(hex).slice(0,20);constpayload{documentType:word,width:100%,height:100%,document:{fileType:docx,key,title:homework.docx,url:documentUrl,permissions:{edit:true,comment:true,review:user.roleteacher}},editorConfig:{callbackUrl,lang:zh-CN,mode:edit,user:{id:user.id,name:user.name}}};return{...payload,token:jwt.sign(payload,process.env.JWT_SECRET)};}document.key是 ONLYOFFICE 识别文档版本的编号。同一份作业内容没有变化时学生刷新页面或多人同时打开后端都应该返回相同的key这样大家才能进入同一个协作会话。等编辑结果保存回作业系统并生成新版本后再更换key让编辑器重新加载最新文件。如果每次刷新都随机生成key同一份作业会被当成多份文档无法正常协作。如果文件已经更新却继续使用旧key编辑器又可能读取之前的缓存。页面端要做的事反而很少。scriptsrchttp://localhost:8080/web-apps/apps/api/documents/api.js/scriptdividplaceholder/divscriptfetch(/api/editor-config?rolestudent).then(responseresponse.json()).then(confignewDocsAPI.DocEditor(placeholder,config));/script打开这个页面时浏览器会从本地 Document Server 加载 ONLYOFFICE 编辑器再用后端返回的配置打开homework.docx。到这里Word 已经能在作业页里编辑了。五、保存回调功能不少在线编辑教程写到“文档能打开”就结束了。可对作业系统来说只能打开几乎等于没做完。学生关闭页面以后新版 Word 必须回到作业系统的存储里。根据 ONLYOFFICE 的 回调处理文档当状态为2时文档已准备好保存请求体中会带上编辑后文件的url。作业系统需要主动下载它。app.post(/api/files/:documentId/onlyoffice/callback,async(req,res){if(req.body.status2||req.body.status6){constdownloadResponseawaitfetch(req.body.url);consteditedBytesBuffer.from(awaitdownloadResponse.arrayBuffer());constdocumentawaitgetDocument({documentId:req.params.documentId,rootDir});constversionName${Date.now()}.docx;awaitfs.writeFile(path.join(document.versionsDir,versionName),editedBytes);awaitfs.writeFile(document.currentFilePath,editedBytes);}res.json({error:0});});演示代码做了两次写入。每份文件自己的versions目录保留历史提交current.docx指向当前版下次打开作业时就会读到新内容。回调处理完必须返回{error:0}不然编辑器会认为保存失败。上面为了让主线更清楚省略了回调 JWT 校验和错误处理。完整演示代码已对Authorization请求头中的签名进行校验。正式系统还应检查文档 ID、当前用户权限和文件下载地址等敏感信息。这一步最常见的坑基本都与地址和密钥有关可能会出现以下问题文档地址能被浏览器打开却不能被 Docker 容器访问callbackUrl误用localhost作业系统与 Document Server 使用了不同的JWT_SECRET回调成功却没有返回规定的 JSON文档更新了document.key仍然是旧值别一上来就怀疑编辑器。先看Docker 中 Document Server 日志再分别从 Mac 和容器里请求文档地址。很多时候问题就是一个写错对象的localhost。六、用学生和教师两个身份跑一遍浏览器打开http://localhost:3000先上传一份 DOCX。文件会出现在列表中每一行都有“学生填写”“教师批改”和“下载”三个入口。学生进入后可以直接填写 Word 作业。所有人都关闭这份作业的编辑页后Document Server 会组装文档并发送保存回调。再以教师身份打开当前版本教师就可以用批注和追踪修改来批改。ONLYOFFICE 官方的 协作功能页 还列出了快速与严格两种协同编辑模式、批注与提及、追踪更改、比较合并和版本历史。批注功能追踪修改功能如果要保存到本地留记录可以点击下载就会把文档下载到本地。到这里原来的“下载作业、本地改、再上传”已经变成“打开作业、在线批改、保留版本”。作业系统的数据模型没有被推倒只是多了一层可以真正处理 Office 文档的能力。七、学校可以先把这套流程跑通给作业系统增加 Word 在线编辑不需要重新做一套办公软件。原有平台继续管课程、用户和文件ONLYOFFICE 文档负责编辑、协作与格式处理两边通过 API 或 WOPI 连起来。ONLYOFFICE 文档开发者版提供开放 API、WOPI 支持和多种开发语言的集成示例也支持自托管。对学校而言本地部署是非常有价值的。学校可以把文档服务放进自有服务器、私有云或校园内网文件存储和访问策略由校方控制。ONLYOFFICE有传输中加密、静态加密、端到端加密与额外文件权限等安全能力。具体合规结论仍要结合学校自己的部署架构、数据分类和管理制度来评估。南京大学把 ONLYOFFICE 文档接入协同表格用于学生作业的在线查看和评阅辽宁工程技术大学则将其接入校内业财融合平台的经济合同管理模块用于在线起草、审批、协作和版本追溯。一个偏教学一个偏校务接入逻辑是相通的。总结先从一份作业开始学校要把 Word 作业搬到线上对接工作主要发生在文档打开和保存这两步。打开时把身份、权限和文件地址交给 ONLYOFFICE编辑结束后再把新版本接回作业系统。课程、学生、成绩和原有的文件管理都可以照常使用。可以先选一门课找几位老师和学生试一遍。学生少下载一次文件老师少整理一轮重复版本这次改造就已经有了很具体的价值。预算有限时也可以先做小范围验证。ONLYOFFICE 提供开源社区版和免费桌面编辑器。2026 开学季期间还有面向教育的免费与折扣方案包括学校和非营利机构可申请的 DocSpace 云服务以及高等教育机构的自托管方案优惠。并且计划在 LMS 中集成 ONLYOFFICE 文档的机构可联系销售团队了解 30% 折扣资格、期限和适用版本以 2026 教育优惠页 为准。想先看在线协作体验可以从 ONLYOFFICE 在线试用 开始。已经准备好自有服务器或者想像本文一样做集成验证可以前往 ONLYOFFICE 下载页 查看本地部署版本。
返回列表