在C#中实现ONLYOFFICE在线编辑Office文档需要结合前端页面嵌入编辑器和后端处理文档存储与回调逻辑。以下是基于搜索结果的实现步骤及关键代码示例:
一、环境准备
部署ONLYOFFICE Document Server
使用Docker快速部署(推荐方式):
docker run -i -t -d -p 9000:80 --restart=always onlyoffice/documentserver
需确保服务器端口开放,并配置JWT_SECRET
以增强安全性。
配置C#开发环境
二、核心实现步骤
1. 前端页面嵌入编辑器
在ASP.NET页面中通过JavaScript初始化编辑器,需传递文档信息和回调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 %>", // 唯一标识,每次编辑需更新
title: "<%= DocumentTitle %>",
url: "<%= DocumentUrl %>" // 文档实际存储路径
},
documentType: "text",
editorConfig: {
mode: "edit", // 模式:edit或view
callbackUrl: "<%= CallbackUrl %>", // 保存回调接口
lang: "zh-CN",
customization: {
autosave: false
}
}
});
</script>
参数说明:
2. 后端处理文档存储与回调
(1)文件上传与下载接口
实现文档的读取与存储逻辑(示例为ASP.NET MVC控制器):
public class DocumentController : Controller
{
// 获取文档内容
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回调
实现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"));
}
// 返回成功响应
context.Response.Write(JsonConvert.SerializeObject(new { error = 0 }));
}
}
}
关键点:
三、权限与安全配置
权限管理
结合ASP.NET Identity或自定义鉴权逻辑,控制用户对文档的读写权限。
JWT安全配置
在ONLYOFFICE启动时设置JWT_SECRET
,并在后端验证:
docker run ... -e JWT_SECRET=your_secret_key ...
后端验证示例:
var isValid = JWT.Validate(token, jwtSecret);
if (!isValid) throw new SecurityException("Invalid token");
四、完整示例与调试
参考官方示例
下载ONLYOFFICE提供的C#示例代码,修改settings.config
中的文档服务器地址和存储路径。
常见问题排查
五、扩展功能
协同编辑
通过mode: "edit"
和实时WebSocket通信支持多人协作。
历史版本
结合数据库记录document.key
与文件版本,实现版本回溯。
格式转换
调用ONLYOFFICE API将文档导出为PDF或其他格式。
实现效果:用户可通过浏览器直接编辑Word/Excel/PPT文档,编辑内容自动保存至服务器,支持多人实时协作。通过上述代码和配置,可快速集成到现有OA或文档管理系统中。
参考来源:ONLYOFFICE官方文档、Docker部署指南及开发者社区示例。
该文章在 2025/5/27 11:51:21 编辑过