在若依前后端分離項目中集成 ONLYOFFICE 以實現在線預覽、編輯和協作功能

在若依前后端分離項目中集成 ONLYOFFICE 以實現在線預覽、編輯和協作功能

概述

ONLYOFFICE 是一款開源的在線文檔編輯套件,可實現文檔預覽、編輯、協作與轉換等功能,可通過 Docker 部署 DocumentServer 服務,并通過 HTTP API 或 WOPI 接口與第三方系統集成。在 RuoYi 前后端分離項目(RuoYi-Vue)中集成 ONLYOFFICE,可使系統具備高效的在線文檔處理能力,并保持與現有微服務架構的無縫銜接。

前置準備

環境要求

  • Linux 服務器,推薦 CentOS 7+ / Ubuntu 20.04+。
  • Docker 與 Docker-Compose 已安裝并配置正常運行。
  • RuoYi-Vue 前端和 Spring Boot 后端項目已能正常啟動并通過 JWT 進行用戶認證。

部署 OnlyOffice DocumentServer

  1. 拉取并啟動官方鏡像

    docker pull onlyoffice/documentserver
    docker run -i -t -d -p 8000:80 --name onlyoffice-documentserver onlyoffice/documentserver
    

    該命令可快速完成 OnlyOffice 文檔服務的部署,并將服務映射至主機 8000 端口。

  2. 高可用/集群部署(可選)
    如需更高可用性,可參考官方 docker-compose 示例進行集群化部署。

DocumentServer 配置

開放私有網絡地址訪問

默認情況下,DocumentServer 會拒絕訪問私有 IP,需要修改配置以允許內網地址:

docker exec -it onlyoffice-documentserver /bin/bash
cd /etc/onlyoffice/documentserver
nano default.json

"request-filtering-agent" 節點下添加:

"request-filtering-agent": {"allowPrivateIPAddress": true,"allowMetaIPAddress": true
},

保存后重啟容器即可生效。

啟用 JWT 驗證(可選)

若需在 OnlyOffice 與后端之間使用 JWT 簽名驗證,可在容器環境變量或 default.json 中配置:

JWT_ENABLED=true
JWT_SECRET=your_secret
JWT_HEADER=Authorization
JWT_IN_BODY=true

啟用后,OnlyOffice 將通過 JWT 校驗編輯請求,有效提升安全性。

后端集成 (RuoYi Spring Boot)

引入依賴

ruoyi-admin 或后端主工程的 pom.xml 中加入 OnlyOffice SDK 依賴:

<dependency><groupId>com.gitee.onlyoffice</groupId><artifactId>onlyoffice-sdk</artifactId><version>1.1.0</version>
</dependency>

(示例座標,僅供參考;也可自行封裝 HTTP 客戶端)。

配置 application.yml

file:online:preview:onlyoffice:domain: http://localhost:8000download: http://your-domain/api/onlyoffice/downloadcallback: http://your-domain/api/onlyoffice/callbacksecret: your_jwt_secret  # 若啟用 JWT

統一管理 OnlyOffice 服務地址、文檔下載和回調接口。

實現 OnlyOffice 服務 API 封裝

在后端創建 OnlyOfficeService,封裝讀取上述配置,生成編輯器所需的 DocumentConfig 對象(包括 fileTypedocumentKeytoken 等字段)。可參考 Lucy-OnlyOffice 項目源碼以及相關開源示例,快速上手 OnlyOffice SDK 的基本調用。

回調接口實現

OnlyOfficeController 中添加回調接口,用于接收編輯后的文件寫回請求:

@PostMapping("/onlyoffice/callback")
public ResponseEntity<?> callback(@RequestBody CallbackRequest request) {// 通過 request.getUrl() 下載編輯后的文檔并替換原存儲return ResponseEntity.ok(Map.of("error", 0));
}

注意處理并發寫入及異常重試,確保文件完整性與數據一致性。

前端集成 (RuoYi-Vue)

安裝依賴

ruoyi-ui 根目錄執行:

npm install @onlyoffice/document-editor-vue --save
# 如遇 peer 依賴沖突,可加 --legacy-peer-deps

即可引入 OnlyOffice 的 Vue 編輯組件。

新增編輯頁面與路由

  1. src/views/document 下新建 OnlyOfficeEditor.vue

  2. src/router/index.js 中添加路由:

    {path: '/document/edit/:id',name: 'OnlyOfficeEditor',component: () => import('@/views/document/OnlyOfficeEditor.vue'),meta: { title: '文檔協作編輯', noCache: true }
    }
    
  3. 在側邊欄菜單中新增“文檔編輯”導航入口。

編寫 OnlyOffice 編輯組件

OnlyOfficeEditor.vue 中:

<template><DocumentEditor :config="config" />
</template>
<script>
import { DocumentEditor } from '@onlyoffice/document-editor-vue';
export default {components: { DocumentEditor },data() { return { config: {} }; },async created() {const res = await this.$axios.get(`/api/onlyoffice/config/${this.$route.params.id}`);this.config = res.data;}
}
</script>

組件將自動渲染在線編輯器,并內置協作與保存邏輯。

測試與優化

多人協作測試

  • 不同賬戶登錄系統,打開同一文檔,驗證實時光標與內容同步。
  • 測試段落鎖定與全體鎖定模式,確保多人協作穩定性。

文件存儲方案

建議結合 MinIO 對象存儲管理文檔文件,以減輕本地磁盤壓力并提升可擴展性,可參考相關教程。

總結與建議

通過上述步驟,您即可在 RuoYi 前后端分離項目中無縫集成 ONLYOFFICE,實現文檔的在線預覽、編輯與多人協作。建議在生產環境中開啟 HTTPS、JWT 驗證與日志監控,并結合 CDN 緩存編輯器靜態資源,以進一步提升安全性與性能。未來可考慮結合 Lucy-OnlyOffice 實現文檔轉換與縮略圖生成功能,豐富系統的文檔管理能力。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/79102.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/79102.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/79102.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SpringMVC 通過ajax 前后端數據交互

在前端的開發過程中&#xff0c;經常在html頁面通過ajax進行前后端數據的交互&#xff0c;SpringMVC的controller進行數據的接收&#xff0c;但是有的時候后端會出現數據無法接收到的情況&#xff0c;這個是因為我們的參數和前端ajax的contentType參數 類型不對應的情景&#x…

最新DeepSeek-Prover-V2-671B模型 簡介、下載、體驗、微調、數據集:專為數學定理自動證明設計的超大垂直領域語言模型(在線體驗地址)

DeepSeek-Prover-V2-671B模型 簡介、下載、體驗、微調、數據集&#xff1a;專為數學定理自動證明設計的超大垂直領域語言模型&#xff08;在線體驗地址&#xff09; 體驗地址&#xff1a;[Hugging Face 在線體驗]https://huggingface.co/playground?modelIddeepseek-ai/DeepS…

Kafka的Topic分區數如何合理設置?

一、分區數設置原則 1. 并發能力基準 分區數決定最大消費者并行度&#xff0c;建議設置為消費者組內消費者數量的整數倍 例如&#xff1a;消費者組有4個實例 → 分區數設為4/8/12等 這里定義的目的是為了讓消費者能均勻的分配到分區&#xff0c;避免打破負載均衡&#xff0c;…

章越科技賦能消防訓練體征監測與安全保障,從傳統模式到智能躍遷的實踐探索

引言&#xff1a;智能化轉型浪潮下&#xff0c;消防訓練的“破局”之需 2021年《“十四五”國家消防工作規劃》的出臺&#xff0c;標志著我國消防救援體系正式邁入“全災種、大應急”的全新階段。面對地震、洪澇、危化品泄漏等復雜救援場景&#xff0c;消防員不僅需要更強的體…

【數據庫原理及安全實驗】實驗五 數據庫備份與恢復

指導書原文 數據庫的備份與恢復SSMS 【實驗目的】 1) 熟悉并掌握利用界面操作進行數據庫備份和恢復的原理和操作。 【實驗原理】 1) 數據庫的恢復包括大容量日志恢復模式和簡單恢復模式。其中大容量日志恢復模式&#xff0c;簡單地說就是要對大容量操作進行最小日志記錄&a…

Linux 基礎IO(上)--文件與文件描述符fd

前言&#xff1a; 在生活里&#xff0c;我們常和各種文件打交道&#xff0c;像用 Word 寫文檔、用播放器看視頻&#xff0c;這些操作背后都離不開文件的輸入輸出&#xff08;I/O&#xff09;。在 Linux 系統中&#xff0c;文件 I/O 操作更是復雜且關鍵。 接下來我們將深入探討…

快速了解Go+rpc

更多個人筆記&#xff1a;&#xff08;僅供參考&#xff0c;非盈利&#xff09; gitee&#xff1a; https://gitee.com/harryhack/it_note github&#xff1a; https://github.com/ZHLOVEYY/IT_note 文章目錄 rpc基礎概念GO的rpc應用簡單編寫json編寫rpc rpc基礎概念 電商系統…

基于大模型的膀胱腫瘤全周期診療方案研究報告

目錄 一、引言 1.1 研究背景與意義 1.2 研究目的與方法 1.3 國內外研究現狀 二、大模型預測膀胱腫瘤的原理與技術基礎 2.1 大模型介紹 2.2 預測原理 2.3 技術支撐 三、術前風險預測與準備方案 3.1 腫瘤分期與惡性程度預測 3.2 患者身體狀況評估 3.3 術前準備工作 …

2025年4月個人工作生活總結

本文為 2025年4月工作生活總結。 研發編碼 一個項目的臨時記錄 自2月份領導讓我牽頭負責一個項目起&#xff0c;在本月算是有較多時間投入——但也是與之前的相比。 月初&#xff0c;清明節前一晚上&#xff0c;因某事務被叫上參加臨時緊急遠程會議&#xff0c;幾方領導都在…

Python爬蟲實戰:獲取軟科網最新特定專業大學排名數據并做分析,為高考填報志愿做參考

一、引言 在高考升學的重要階段,志愿填報成為考生和家長關注的核心問題。準確、全面且具有權威性的大學專業排名數據,是考生做出科學志愿決策的關鍵依據。軟科網作為專業的大學排名信息發布平臺,其發布的計算機科學與技術專業排名數據,因具有較高的公信力和參考價值,備受…

自學S32k144(18)————芯片鎖死問題及成功解鎖流程

1.鎖死原因 溫度過高flash異常操作靜電等電壓異常問題。。。。 本人出現情況&#xff1a;之前開發板不知什么原因&#xff0c;發生短路&#xff0c;重新置換芯片后&#xff0c;發現芯片在S32DS中無法正常燒錄 判斷可能是由于焊接時溫度過高導致鎖死。需解鎖芯片。 2.解決方法…

ISIS的由于L1產生的一系列問題

如果有些名詞不清晰可以查看之前文章 L1訪問其他區域使用缺省路由會引發次優路徑問題&#xff0c;但次優路徑leak路由又會引發路由環路問題&#xff0c;下面將會從去缺省路由到路由環路一一解決 Level 1的缺省路由 L1訪問其他區域使用缺省路由 --> 引發次優路徑 --> 引…

C++繼承(下)

目錄 一、繼承與友元 二、繼承與靜態成員 三、菱形繼承及菱形虛擬繼承 1. 繼承的方式 2. 菱形繼承的問題 3. 菱形虛擬繼承 4. 虛擬繼承解決數據冗余和二義性的原理 4.1 普通菱形繼承的內存布局 4.2 虛擬繼承的內存布局 四、繼承的總結和反思 1. 多繼承的復雜性 2.…

【漫話機器學習系列】233.激活閾(Threshold Activation)

深度學習入門&#xff1a;了解“閾值激活函數”&#xff08;Threshold Activation Function&#xff09; 激活函數是神經網絡中至關重要的一環。今天&#xff0c;我們通過一幅簡單直觀的手繪圖&#xff0c;一起理解最早期也最基礎的激活函數之一 —— 閾值激活函數&#xff08;…

(4)python中jupyter lab使用python虛擬環境

1. 先了解IPython和IPyKernel簡介 IPython 是一個功能強大的交互式 Python 解釋器和開發環境。它提供了一種增強的 Python Shell,使得用戶能夠以交互的方式探索、分析和可視化數據。IPython 的名稱來源于 "Interactive Python",體現了其交互式的特性。 IPyKernel 是…

nginx 配置要領

你提出的問題非常好&#xff01;確實在配置 WebSocket 代理時&#xff0c;proxy_pass 的 URL 處理需要特別注意。以下是關鍵解釋和修正建議&#xff1a; 1. 原配置的問題分析 location /ws/ {proxy_pass http://fastapi-container:8000; # 會保留 /ws/ 前綴傳遞給后端 }這種配…

【AI】DeepSeek 流程圖 / 時序圖制作,Word 排版錯亂問題,文字轉直觀圖形

一&#xff1a;動態流程圖 / 時序圖制作&#xff08;DeepSeek Draw.IO&#xff09; 工具準備 DeepSeek&#xff08;AI 生成代碼&#xff09;&#xff1a;官網&#xff08;免費&#xff09;Draw.IO&#xff08;可視化渲染&#xff09;&#xff1a;官網&#xff08;免費&#…

4. python3基本數據類型

Python3 中有六個標準的數據類型&#xff1a; Number&#xff08;數字&#xff09; String&#xff08;字符串&#xff09; List&#xff08;列表&#xff09; Tuple&#xff08;元組&#xff09; Set&#xff08;集合&#xff09; Dictionary&#xff08;字典&#xff09; Pyt…

WPF之TextBox控件詳解

文章目錄 1. TextBox概述2. 基本屬性與功能3. 輸入控制詳解3.1 MaxLength3.2 AcceptsReturn3.3 AcceptsTab3.4 CharacterCasing3.5 IsUndoEnabled3.6 自定義輸入限制 4. 文本選擇與操作4.1 選擇屬性4.2 選擇方法4.3 文本操作4.4 選擇事件4.5 實現自定義文本處理功能 5. 滾動支持…

1.4 點云數據獲取方式——結構光相機

圖1-4-1結構光相機 結構光相機作為獲取三維點云數據的關鍵設備,其工作原理基于主動式測量技術。通過投射已知圖案,如條紋、點陣、格雷碼等,至物體表面,這些圖案會因物體表面的高度變化而發生變形。與此同時,利用相機從特定