当前位置: 首页 > news >正文

onlyoffice api开发

编写代码

按照https://api.onlyoffice.com/editors/basic编写代码

<html>
<head><meta charset="UTF-8"><meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>01</title>
</head>
<body style="height: 100%;margin: 0;">
<div id="placeholder"></div>
<script type="text/javascript" src="http://10.10.90.139:8099/web-apps/apps/api/documents/api.js"></script>
<script type="text/javascript">config = {"document": {"fileType": "docx","key": "CcauAgYYjWkLrMqqwACZ","title": "测试01.docx","url": "http://10.10.90.139:8849/uploads/onlyoffice01.docx"},"documentType": "word","editorConfig": {"callbackUrl": ""}};var docEditor = new DocsAPI.DocEditor("placeholder", config);
</script>
</body>
</html>

其中http://10.10.90.139:8099是onlyoffice部署的地址
访问页面报错
在这里插入图片描述
两种解决方案

去掉jwt验证

将local.json里面 的token下的inbox、outbox、browser值改为false。

"token": { "enable": { "request": { "inbox": false, "outbox": false }, "browser": false },

然后重启下服务。命令:systemctl restart ds-*
windows下重启onlyoffice

添加token

新建asp.net core 空项目
安装JWT和Newtonsoft.json
在这里插入图片描述
修改Program

namespace OnlyOfficeStu02;public class Program
{public static void Main(string[] args){var builder = WebApplication.CreateBuilder(args);builder.Services.AddControllers();var app = builder.Build();app.UseRouting();app.UseDefaultFiles();app.UseStaticFiles();app.MapControllers();app.Run();}
}

新建JwtManager

using JWT;
using JWT.Algorithms;
using JWT.Builder;
using JWT.Serializers;namespace OnlyOfficeStu02.Utils;public static class JwtManager
{private static readonly string Secret;public static readonly bool Enabled;public static readonly bool SignatureUseForRequest;static JwtManager(){Secret = "A4DgWFYPE6ILYOGH2tGlnkYeW0u1zp";  // get token secret from the config parametersEnabled = !string.IsNullOrEmpty(Secret);  // check if the token is enabledSignatureUseForRequest = true;}// encode a payload object into a token using a secret keypublic static string Encode(IDictionary<string, object> payload){var encoder = new JwtEncoder(new HMACSHA256Algorithm(),new JsonNetSerializer(),new JwtBase64UrlEncoder());return encoder.Encode(payload, Secret);}public static string Encode(string payload){var encoder = new JwtEncoder(new HMACSHA256Algorithm(),new JsonNetSerializer(),new JwtBase64UrlEncoder());return encoder.Encode(payload, Secret);}// decode a token into a payload object using a secret keypublic static string Decode(string token){if (!Enabled || string.IsNullOrEmpty(token)) return "";return JwtBuilder.Create().WithAlgorithm(new HMACSHA256Algorithm()).WithSecret(Secret).MustVerifySignature().Decode(token);}
}

新建IndexController

using Microsoft.AspNetCore.Mvc;
using OnlyOfficeStu02.Models;
using OnlyOfficeStu02.Utils;namespace OnlyOfficeStu02.Controllers;/// <summary>
/// 首页控制器
/// </summary>
[ApiController]
[Route("[Controller]/[Action]")]
public class IndexController : ControllerBase
{/// <summary>/// 构造函数注入/// </summary>public IndexController(){}/// <summary>/// jwt编码/// </summary>/// <param name="param"></param>/// <returns></returns>[HttpPost]public IActionResult JwtEncode([FromBody]JwtEncodeParamModel param){var jwtStr = JwtManager.Encode(param.JsonStr);return new JsonResult(new JwtEncodeViewModel{Jwt = jwtStr});}/// <summary>/// 回调相应/// </summary>/// <returns></returns>[HttpGet]public IActionResult CallBack(){var res = new CallBackViewModel();res.Error = 0;return new JsonResult(res);}
}

wwwroot下新增index.html

<html>
<head><meta charset="UTF-8"><meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>01</title>
</head>
<body style="height: 100%;margin: 0;">
<div id="placeholder"></div>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
<script type="text/javascript" src="http://10.10.90.139:8099/web-apps/apps/api/documents/api.js"></script>
<script type="text/javascript">const config = {"document": {"fileType": "docx","key": "CcauAgYYjWkLrMqqwACZ","title": "测试01.docx","url": "http://10.10.90.139:8849/uploads/onlyoffice01.docx",// 权限,每个要打开的文档都可以设置独立的权限"permissions": {// 启用评论"comment": false,// 启用下载"download": false,// 启用编辑"edit": false,// 启用导出"print": false,// 启用预览"review": true}},"documentType": "word","editorConfig": {"callbackUrl": "/index/callback",// 设置语言"lang": "zh-CN",// 添加用户信息"user": {"group": "技术部","id": "wjl","name": "wjl"},}};$(function () {const configJsonStr = JSON.stringify(config);$.ajax({type: "POST",url: "/index/jwtencode",contentType: "application/json",data: JSON.stringify({"jsonStr":configJsonStr}),dataType: "json",success: function (data) {console.log("成功")console.log(data)if(data.jwt){config.token = data.jwt;var docEditor = new DocsAPI.DocEditor("placeholder", config);}},error: function (err) {console.error(err);}})})
</script>
</body>
</html>

启动项目访问
在这里插入图片描述

参考

token获取
常见问题
java问题
onlyoffice jwt
onlyoffice jwt
onlyoffice 签名

http://www.lryc.cn/news/305648.html

相关文章:

  • 设计模式-工厂方法模式(C++)
  • ThreeJS 几何体顶点position、法向量normal及uv坐标 | UV映射 - 法向量 - 包围盒
  • 基于SpringBoot的家教管理系统
  • 简单mock server模拟用户请求给小程序提供数据
  • 【MATLAB】 EWT信号分解+FFT傅里叶频谱变换组合算法
  • MATLAB中,如何捕获和处理异常?如何在MATLAB中自定义错误消息?在MATLAB中,error函数和warning函数有什么区别?
  • 【算法与数据结构】127、LeetCode单词接龙
  • CAN——创建一个数据库DBC文件
  • (十三)【Jmeter】线程(Threads(Users))之tearDown 线程组
  • MySQL数据库基础(十三):关系型数据库三范式介绍
  • 掌控互联网脉络:深入解析边界网关协议(BGP)的力量与挑战
  • Vue2页面转化为Vue3
  • 【课程作业】提取图中苹果的面积、周长和最小外接矩形的python、matlab和c++代码
  • 解决easyExcel模板填充时转义字符\{xxx\}失效
  • 在项目中使用CancelToken选择性取消Axios请求
  • [c++] 记录一次引用使用不当导致的 bug
  • 能不能节约百分之九十的算力来训练模型
  • LeetCode206: 反转链表.
  • 高级统计方法 第1次作业
  • spinalhdl,vivado,fpga
  • Tomcat线程池原理(下篇:工作原理)
  • 【服务器数据恢复】通过reed-solomon算法恢复raid6数据的案例
  • LeetCode 2583.二叉树中的第 K 大层和:层序遍历 + 排序
  • element ui 安装 简易过程 已解决
  • websoket
  • 案例:微服务从Java/SpringBoot迁移到Golan
  • 小波变换模拟
  • cv::Mat图像操作
  • 【机器学习基础】一元线性回归(适合初学者的保姆级文章)
  • 2024年软件测试岗位-面试