当前位置: 首页 > 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 签名

相关文章:

onlyoffice api开发

编写代码 按照https://api.onlyoffice.com/editors/basic编写代码 <html> <head><meta charset"UTF-8"><meta name"viewport"content"widthdevice-width, user-scalableno, initial-scale1.0, maximum-scale1.0, minimum-scal…...

设计模式-工厂方法模式(C++)

工厂方法模式&#xff08;Factory Method Pattern&#xff09;是一种创建型设计模式&#xff0c;它定义了一个用于创建对象的接口&#xff0c;但将实际的对象创建过程延迟到子类中。这种模式解耦了具体产品的创建过程&#xff0c;使得系统更加灵活和可扩展。 下面是一个使用 C…...

ThreeJS 几何体顶点position、法向量normal及uv坐标 | UV映射 - 法向量 - 包围盒

文章目录 几何体的顶点position、法向量normal及uv坐标UV映射UV坐标系UV坐标与顶点坐标设置UV坐标案例1&#xff1a;使用PlaneGeometry创建平面缓存几何体案例2&#xff1a;使用BufferGeometry创建平面缓存几何体 法向量 - 顶点法向量光照计算案例1&#xff1a;不设置顶点法向量…...

基于SpringBoot的家教管理系统

基于SpringBootVue的家教管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 前台主页 家教 个人中心 管理员界面 摘要 本文介绍了基于SpringBoot框架开发的家…...

简单mock server模拟用户请求给小程序提供数据

整理小程序代码时发现一此小程序离开了mock-server基本上没有办法显示了,因此用node,express来满足给小程序提供演示数据的功能 const express require(express); const { createCanvas, Image } require(canvas); const fs require(fs); const path require(path);…...

【MATLAB】 EWT信号分解+FFT傅里叶频谱变换组合算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 展示出图效果 1 EWT分解算法 EWT分解算法是一种基于小波变换的信号分解算法&#xff0c;它可以将信号分解为一系列具有不同频率特性的小波分量。该算法的基本思想是将信号分解为多个不同尺度的小波分量&#xff0c;并对…...

MATLAB中,如何捕获和处理异常?如何在MATLAB中自定义错误消息?在MATLAB中,error函数和warning函数有什么区别?

MATLAB中&#xff0c;如何捕获和处理异常&#xff1f; 在MATLAB中&#xff0c;捕获和处理异常通常使用try-catch语句。try块包含可能引发异常的代码&#xff0c;而catch块则包含当异常发生时执行的代码。以下是如何在MATLAB中捕获和处理异常的基本步骤&#xff1a; 使用try关键…...

【算法与数据结构】127、LeetCode单词接龙

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;示例1为例&#xff0c;hit到达cog的路线不止一条&#xff0c;如何找到最短是关键。广度优先搜索是一圈…...

CAN——创建一个数据库DBC文件

一、创建一个工程 file——new——can 500kbaud1ch 得到一个工程文件.cfg 二、实现两个节点通讯 can networks 三、创建数据库DBC tool——candbeditor——file——creatdatabase——cantemplate.dbc 1.建数值表 view——value tables——空白处右击add—— definition 定…...

(十三)【Jmeter】线程(Threads(Users))之tearDown 线程组

简述 操作路径如下: 作用:在正式测试结束后执行清理操作,如关闭连接、释放资源等。配置:设置清理操作的采样器、执行顺序等参数。使用场景:确保在测试结束后应用程序恢复到正常状态,避免资源泄漏或对其他测试的影响。优点:提供清理操作,确保测试环境的整洁和可重复性…...

MySQL数据库基础(十三):关系型数据库三范式介绍

文章目录 关系型数据库三范式介绍 一、什么是三范式 二、数据冗余 三、范式的划分 四、一范式 五、二范式 六、三范式 七、总结 关系型数据库三范式介绍 一、什么是三范式 设计关系数据库时&#xff0c;遵从不同的规范要求&#xff0c;设计出合理的关系型数据库&…...

掌控互联网脉络:深入解析边界网关协议(BGP)的力量与挑战

BGP简介 边界网关协议&#xff08;Border Gateway Protocol&#xff0c;BGP&#xff09;是互联网上最重要的路由协议之一&#xff0c;负责在不同自治系统&#xff08;AS&#xff09;之间传播路由信息。BGP使得互联网中的不同网络可以互相通信&#xff0c;支持互联网的规模化扩…...

Vue2页面转化为Vue3

vue2element-ui转化为Vue3element plus 后台管理系统&#xff1a;增删查改 vue2页面&#xff1a; <template><div class"app-container"><div><el-form:model"queryParams"ref"queryForm"size"small":inline&qu…...

【课程作业】提取图中苹果的面积、周长和最小外接矩形的python、matlab和c++代码

提取图中苹果的面积、周长和最小外接矩形 在图像处理中&#xff0c;提取对象的关键属性是常见的任务之一。本文将演示如何使用三种流行的编程语言——Python、Matlab和C&#xff0c;利用相应的图像处理库&#xff08;OpenCV或Matlab内置函数&#xff09;来提取图像中苹果的面积…...

解决easyExcel模板填充时转义字符\{xxx\}失效

正常我们在使用easyExcel进行模板填充时&#xff0c;定义的变量会填充好对应的实际数据&#xff0c;未定义的变量会被清空&#xff0c;但是如果这个未定义的变量其实是模板的一部分&#xff0c;那么清空了就出错了。 在这张图里&#xff0c;上面的是模板填充后导出的文件&…...

在项目中使用CancelToken选择性取消Axios请求

Axios 提供了 CancelToken 类来创建取消标记。取消标记实际上是一个包含 token 标记和 cancel 方法的对象。 1、基本使用方法 const CancelToken axios.CancelToken; const source CancelToken.source();axios.get(/user/12345, {cancelToken: source.token }).catch(functi…...

[c++] 记录一次引用使用不当导致的 bug

在工作中看到了如下代码&#xff0c;代码基于 std::thread 封装了一个 Thread 类。Thread 封装了业务开发中常用的接口&#xff0c;比如设置调度策略&#xff0c;设置优先级&#xff0c;设置线程名。如下代码删去了不必要的代码&#xff0c;只保留能说明问题的代码。从代码实现…...

能不能节约百分之九十的算力来训练模型

Sora是由OpenAI开发的视频生成模型&#xff0c;它采用了多种先进的技术和架构&#xff0c;能够根据文本描述生成长达一分钟的高清视频。虽然OpenAI并未公开Sora的详细模型架构和实现细节&#xff0c;但我们可以根据公开的信息和参考论文来了解其技术架构。 Sora的核心技术架构主…...

LeetCode206: 反转链表.

题目描述 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 解题方法 假设链表为 1→2→3→∅&#xff0c;我们想要把它改成∅←1←2←3。在遍历链表时&#xff0c;将当前节点的 next指针改为指向前一个节点。由于节点没有引用其前一…...

高级统计方法 第1次作业

概念 1. 请解释什么是P值&#xff0c;怎么计算p值&#xff0c;p值结果怎么理解&#xff0c;p值有哪些应用......&#xff1f; &#xff08;a&#xff09;什么是P值 P值是一种用来判定假设检验结果的一个参数&#xff0c;它描述了在原假设为真的情况下&#xff0c;比所得到的…...

拯救变砖的STM32:利用BOOT0/1组合实现三种烧录救机方案(含串口/JTAG异常处理)

STM32紧急救援指南&#xff1a;BOOT引脚组合的三种烧录方案与异常处理实战 引言&#xff1a;当STM32突然"变砖"时 深夜的实验室里&#xff0c;王工盯着眼前毫无反应的STM32开发板&#xff0c;额头渗出细密的汗珠——距离项目交付只剩12小时&#xff0c;核心控制程序却…...

smart-mqtt v1.5.4发布,认证能力大升级

smart-mqtt v1.5.4正式发布&#xff0c;此次版本聚焦企业级连接认证能力升级&#xff0c;推出全新高级认证插件&#xff0c;在高性能底座上补齐企业级接入能力&#xff0c;还公布了获取方式与未来规划。版本核心亮点v1.5.4重点通过advanced-auth-plugin让连接认证更适配企业真实…...

PID调参翻车实录:STM32驱动编码电机时,P值过大为何电机啸叫还振荡?

PID调参实战&#xff1a;STM32编码电机啸叫与振荡问题深度解析 当你在深夜实验室里第一次听到电机发出刺耳的啸叫声&#xff0c;同时观察到示波器上速度曲线像过山车一样上下震荡时&#xff0c;那种既困惑又兴奋的感觉&#xff0c;相信每个做过电机控制的工程师都深有体会。这不…...

当AI走进柴米油盐:我们的生活正在发生怎样的改变?

当清晨的AI闹钟根据你的睡眠周期轻声唤醒&#xff0c;通勤导航提前规避了突发拥堵的路段&#xff0c;办公软件里的AI一键生成了会议纪要与数据报表&#xff0c;回家路上智能家电已提前调好室温与灯光&#xff0c;睡前AI陪练帮孩子巩固了当天的知识点&#xff0c;也为独居的父母…...

三三复制商业模式系统介绍

三三复制商业模式系统介绍&#xff1a;裂变逻辑与合规落地全解析在数字经济时代&#xff0c;社交电商与分销模式的创新成为企业突破增长瓶颈的关键。三三复制模式以其几何级数的裂变效率、清晰的层级收益结构和低门槛参与机制&#xff0c;在电商、直销等领域展现出强大的生命力…...

别再手动埋点了!用OpenTelemetry Operator在K8s里给Java应用自动注入链路追踪(附完整YAML)

零代码改造&#xff1a;OpenTelemetry Operator在K8s中实现Java应用全自动观测 当微服务架构遇上云原生环境&#xff0c;可观测性成为工程团队的生命线。但传统埋点方案需要侵入业务代码、增加维护成本&#xff0c;这与快速迭代的DevOps理念背道而驰。本文将揭示如何通过OpenTe…...

Magma智能剪辑系统:视频自动生成实战

Magma智能剪辑系统&#xff1a;视频自动生成实战 1. 引言 想象一下这样的场景&#xff1a;你有一个精彩的视频创意&#xff0c;写好了详细的脚本&#xff0c;但面对一堆零散的素材片段却无从下手。传统的视频剪辑需要逐帧挑选、拼接、添加转场&#xff0c;一个几分钟的视频可…...

CasADi实战:用Python搞定机器人路径规划中的数值优化问题(附IPOPT配置)

CasADi实战&#xff1a;用Python搞定机器人路径规划中的数值优化问题&#xff08;附IPOPT配置&#xff09; 机器人路径规划的核心在于如何在复杂环境中找到一条既安全又高效的轨迹。这本质上是一个带约束的数值优化问题——我们需要最小化某种代价函数&#xff08;如路径长度或…...

免费开源Sunshine游戏串流服务器终极指南:打造你的专属云游戏平台

免费开源Sunshine游戏串流服务器终极指南&#xff1a;打造你的专属云游戏平台 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 想要在任何设备上畅玩PC游戏&#xff0c;却受限于硬件…...

西门子PLC存储区全解析:从M区到DB块的实战避坑指南

西门子PLC存储区全解析&#xff1a;从M区到DB块的实战避坑指南 第一次接触西门子PLC编程时&#xff0c;面对M区、L区和DB块这些存储区概念&#xff0c;我完全摸不着头脑。记得有次调试设备&#xff0c;明明在线监控看到M0.0已经置位&#xff0c;但程序就是不执行相应动作&#…...