在C#中實現(xiàn)ONLYOFFICE在線編輯Office文檔需要結(jié)合前端頁面嵌入編輯器和后端處理文檔存儲與回調(diào)邏輯。以下是基于搜索結(jié)果的實現(xiàn)步驟及關(guān)鍵代碼示例:
一、環(huán)境準(zhǔn)備
部署ONLYOFFICE Document Server
使用Docker快速部署(推薦方式):
docker run -i -t -d -p 9000:80 --restart=always onlyoffice/documentserver
需確保服務(wù)器端口開放,并配置JWT_SECRET
以增強安全性。
配置C#開發(fā)環(huán)境
二、核心實現(xiàn)步驟
1. 前端頁面嵌入編輯器
在ASP.NET頁面中通過JavaScript初始化編輯器,需傳遞文檔信息和回調(diào)URL:
<!-- 引用ONLYOFFICE API -->
<script src="http://[DocumentServer_IP]:9000/web-apps/apps/api/documents/api.js"></script>
<div id="editor"></div>
<script>
var docEditor = new DocsAPI.DocEditor("editor", {
document: {
fileType: "docx",
key: "<%= DocumentKey %>", // 唯一標(biāo)識,每次編輯需更新
title: "<%= DocumentTitle %>",
url: "<%= DocumentUrl %>" // 文檔實際存儲路徑
},
documentType: "text",
editorConfig: {
mode: "edit", // 模式:edit或view
callbackUrl: "<%= CallbackUrl %>", // 保存回調(diào)接口
lang: "zh-CN",
customization: {
autosave: false
}
}
});
</script>?
參數(shù)說明:
2. 后端處理文檔存儲與回調(diào)
(1)文件上傳與下載接口
實現(xiàn)文檔的讀取與存儲邏輯(示例為ASP.NET MVC控制器):
public class DocumentController : Controller
{
// 獲取文檔內(nèi)容
public ActionResult GetFile(string fileId)
{
var filePath = Server.MapPath("~/Documents/" + fileId);
return File(filePath, "application/octet-stream");
}
// 保存文檔
[HttpPost]
public ActionResult SaveFile(string fileId)
{
var filePath = Server.MapPath("~/Documents/" + fileId);
Request.InputStream.CopyTo(System.IO.File.Create(filePath));
return Json(new { error = 0 });
}
}
(2)處理ONLYOFFICE回調(diào)
實現(xiàn)callbackUrl
接口,驗證JWT并處理保存邏輯:
public class CallbackHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
var json = new StreamReader(context.Request.InputStream).ReadToEnd();
dynamic data = JsonConvert.DeserializeObject(json);
// 驗證JWT簽名
var jwtSecret = "Your_JWT_Secret";
var payload = JWT.Decode(data.token.ToString(), jwtSecret);
dynamic payloadData = JsonConvert.DeserializeObject(payload);
if (payloadData.status == "must_save")
{
var fileUrl = payloadData.url.ToString();
var newKey = Guid.NewGuid().ToString(); // 生成新key以更新版本
// 下載并保存文件
using (var client = new WebClient())
{
client.DownloadFile(fileUrl, Server.MapPath("~/Documents/" + newKey + ".docx"));
}
// 返回成功響應(yīng)
context.Response.Write(JsonConvert.SerializeObject(new { error = 0 }));
}
}
}?
關(guān)鍵點:
三、權(quán)限與安全配置
權(quán)限管理
結(jié)合ASP.NET Identity或自定義鑒權(quán)邏輯,控制用戶對文檔的讀寫權(quán)限。
JWT安全配置
在ONLYOFFICE啟動時設(shè)置JWT_SECRET
,并在后端驗證:
docker run ... -e JWT_SECRET=your_secret_key ...
后端驗證示例:
var isValid = JWT.Validate(token, jwtSecret);
if (!isValid) throw new SecurityException("Invalid token");
四、完整示例與調(diào)試
參考官方示例
下載ONLYOFFICE提供的C#示例代碼,修改settings.config
中的文檔服務(wù)器地址和存儲路徑。
常見問題排查
五、擴展功能
協(xié)同編輯
通過mode: "edit"
和實時WebSocket通信支持多人協(xié)作。
歷史版本
結(jié)合數(shù)據(jù)庫記錄document.key
與文件版本,實現(xiàn)版本回溯。
格式轉(zhuǎn)換
調(diào)用ONLYOFFICE API將文檔導(dǎo)出為PDF或其他格式。
實現(xiàn)效果:用戶可通過瀏覽器直接編輯Word/Excel/PPT文檔,編輯內(nèi)容自動保存至服務(wù)器,支持多人實時協(xié)作。通過上述代碼和配置,可快速集成到現(xiàn)有OA或文檔管理系統(tǒng)中。
參考來源:ONLYOFFICE官方文檔、Docker部署指南及開發(fā)者社區(qū)示例。
該文章在 2025/5/27 11:51:21 編輯過