zdppy_api+onlyoffice通过回调函数实现文档的保存

思路

1、使用zdppy_api开发文档存储服务
2、使用zdppy_api开发一个文档服务的回调接口
3、使用docker启动onlyoffice作为文档服务
4、使用vue开发前端界面
5、使用vue实现加载文档并编辑,之后关闭页面,大约10秒以后,会自动触发回调,通知zdppy_api开发的文档服务接口,status为2,同时会有一个url是文档地址

{'key': 'Khirz6zTPdfd7', 'status': 2, 'url': 'http://127.0.0.1:8080/cache/files/data/Khirz6zTPdfd7_4862/output.docx/output.docx?md5=MX_nf_TezDs5dhZE9o9cNQ&expires=1719734135&shardkey=Khirz6zTPdfd7&filename=output.docx', 'history': {}, 'users': ['uid-1719408360675'], 'actions': [{'type': 0, 'userid': 'uid-1719408360675'}], 'lastsave': '2024-06-30T07:37:12.000Z', 'notmodified': False, 'filetype': 'docx'}

6、可以访问url实现后续保存文件的逻辑。

使用docker部署onlyoffice

加载镜像:

docker load -i docserver:7

运行容器:

docker run -itd -p 8080:80 --name docserver  -e JWT_ENABLED=false --restart=always onlyoffice/documentserver:8

开发文档存储服务

import json
import reqimport api
from api import middleware
from api.zjson.response import JSONResponseasync def doc_callback(request):data = await api.req.get_json(request)print("callback === ", data)# status == 2 文档准备好被保存if data.get("status") == 2:req.download(data.get("url"), "data/test2.docx")# status == 6 文档编辑会话关闭return JSONResponse(json.dumps({"error": 0}))app = api.Api(routes=[api.resp.dir_route("/dist", "data"),api.resp.post("/callback", doc_callback),],middleware=[middleware.cors()],
)if __name__ == "__main__":app.run(port=18889)

前端文件编辑

<script setup>
import {message} from "ant-design-vue";const onLoadDocumentClick = () => {message.success("load document")// isDocument.value = truenew DocsAPI.DocEditor("doc", {"document": {"fileType": "docx","key": "Khirz6zTPdfd7","title": "Example Document Title.docx","url": "http://192.168.234.138:18889/dist/test.docx"},"editorConfig": {"callbackUrl": "http://192.168.234.138:18889/callback"},"documentType": "word",height: '700px',width: '100%'});
}
</script>
<template><div class="bg-indigo-50 p-8 min-h-screen"><div class="bg-amber-200 p-8"><a-button type="primary" @click="onLoadDocumentClick">Load Document</a-button></div><div class="bg-amber-400 p-8 min-h-96"><div id="doc">doc</div></div></div>
</template>

总结

整体的开发流程:

  • 1、通过点击按钮打开一篇文档进行编辑,编辑的内容会同步发送到onlyoffice文档编辑服务
  • 2、当我们编辑完毕,关闭文档大约10秒以后,onlyoffice文档编辑服务会通过回调函数通知zdppy_api开发的文档存储服务,此时status为2,同时还有一个url记录了临时保存的文档,由文档存储服务自己决定将文档如何进行后续的存储

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/38128.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python办公自动化之pandas

用到的库&#xff1a;pandas 实现效果&#xff1a;创建一张空白的表同时往里面插入准备好的数据 代码&#xff1a; import pandas # 准备好要写入的数据&#xff0c;字典格式 data{日期:[7.2,7.3],产品型号:[ca,ce],成交量:[500,600]} dfpandas.DataFrame(data) # 把数据写入…

学习C语言第一步:300行代码实现输出“Hello World“

学习所有语言的第一步几乎都是在控制台输出"Hello World",C语言也是如此&#xff0c;C语言支持结构化编程、词汇范围和递归等特性&#xff0c;C语言编写的代码在稍作修改或无需修改的情况下可以在多种不同的操作系统和平台上编译和运行&#xff0c;同时运行速度极快。…

java容器常用方法、自定义排序

List 本质上是一个容器&#xff0c;用来存储数据。 因为其为一个接口&#xff0c;故我们不能直接new。 而List常用的实现类为ArrayList和LinkedList. ArrayList底层&#xff1a;数组 LinkedList底层&#xff1a;链表 常用方法&#xff1a; add(元素):新增一个元素&#…

找出 cs 数据库中的大表并将它们的数据减少到 500 条

要找出 cs 数据库中的大表并将它们的数据减少到 500 条&#xff0c;可以按照以下步骤进行&#xff1a; 识别大表&#xff1a;首先列出数据量大于 1MB 的表为每个大表生成并执行保留前 500 条记录的 SQL 语句 以下是一些常用数据库的示例&#xff1a; MySQL 列出数据量大于 1…

[HBM] HBM TSV (Through Silicon Via) 结构与工艺

依公知及经验整理&#xff0c;原创保护&#xff0c;禁止转载。 专栏 《深入理解DDR》 全文 3300 字。 1 概念 1.1 什么是HBM TSV 使用 TSV 堆叠多个DDR DRAM成为一块HBM, 成倍提高了存储器位宽&#xff0c; 一条位宽相当于高速公路的一条车道&#xff0c; 车道越多&#xff…

期末考试后班主任如何发布学生成绩?

期末考试成绩一出&#xff0c;家长们便急切地想要了解孩子的学习情况。以往&#xff0c;老师们需要一个个私信家长&#xff0c;将成绩单发送出去&#xff0c;这项工作既繁琐又耗时。期末之际&#xff0c;老师们的工作本就繁重&#xff0c;如何有效减轻他们的负担&#xff0c;让…

Prompting已死?DSPy:自动优化LLM流水线

在 LLM 应用中&#xff0c;如何优化一个 pipeline 的流程一直是一个比较头疼的问题。提示词作为一个预定义字符串&#xff0c;往往也没有很好地优化方向。本文中的 DSPy 框架或许能在实际应用中对效果优化起到一定帮助。 当前&#xff0c;在 LLM 的应用中&#xff0c;大家都在探…

AI在音乐创作中的角色:创造还是毁灭?

目录 一、基本情况介绍 二、近期新闻 三、AI生成音乐方面的商业模式 四、人工智能和音乐人可能的合作模式 五、人们如何借助AI来创作音乐 六、人工智能在创意产业引发的伦理道德问题 七、如何平衡技术发展与提高人类创造积极性的关系&#xff1f; 总结 一、基本情况介绍…

Hugging Face Accelerate 两个后端的故事:FSDP 与 DeepSpeed

社区中有两个流行的零冗余优化器 (Zero Redundancy Optimizer&#xff0c;ZeRO)算法实现&#xff0c;一个来自DeepSpeed&#xff0c;另一个来自PyTorch。Hugging FaceAccelerate对这两者都进行了集成并通过接口暴露出来&#xff0c;以供最终用户在训练/微调模型时自主选择其中之…

EI CCIE学习笔记-SDAccess之一:SDAccess解决方案

Chapter 1 SD-Access Solution Proposal 1.1 概念引入 SDN三要素&#xff1a;集中控制、转控分离、可编程 DNA DNA:Digital Network Architecture数字网络架构 思科提出的跨园区&#xff0c;分支机构&#xff0c;WAN和扩展企业的企业网络架构它提供了一种开放&#xff0c;可扩…

C++操作系列(二):VSCode安装和配置C++开发环境

1. VSCode下载 进入VSCode的官网网页&#xff1a;Download Visual Studio Code - Mac, Linux, Windows 下载相应的版本&#xff1a; 2. 安装VSCode 安装到指定位置&#xff1a; 一路下一步&#xff0c;直至安装完成&#xff1a; 3. 安装C插件 3.1. 安装C/C 点击扩展图标&…

微软有哪些大模型Copilot应用?

微软推出了多款基于大模型的Copilot应用&#xff0c;这些应用利用人工智能和自然语言处理技术&#xff0c;旨在提升用户在不同领域的生产力和效率。以下是一些主要的Copilot应用&#xff1a; 1、Microsoft 365 Copilot&#xff1a;集成于Word、Excel、PowerPoint、Outlook和Te…

从头开始构建一个小规模的文生视频模型

OpenAI 的 Sora、Stability AI 的 Stable Video Diffusion 以及许多其他已经发布或未来将出现的文本生成视频模型&#xff0c;是继大语言模型 (LLM) 之后 2024 年最流行的 AI 趋势之一。 在这篇博客中&#xff0c;作者将展示如何将从头开始构建一个小规模的文本生成视频模型&a…

C语言力扣刷题1——最长回文字串[双指针]

力扣算题1——最长回文字串[双指针] 一、博客声明二、题目描述三、解题思路1、思路说明2、知识补充a、malloc动态内存分配b、free释放内存c、strlen求字符数组长度d、strncpy函数 四、解题代码&#xff08;附注释&#xff09; 一、博客声明 找工作逃不过刷题&#xff0c;为了更…

Docker配置远程连接

前置条件&#xff1a;docker所在的服务器开放2375端口 文件&#xff1a;/usr/lib/systemd/system/docker.service 节点ExecStart 追加 -H tcp://0.0.0.0:2375

智慧校园变革之路:全平台综合概述与最佳实践

在当今信息化浪潮的推动下&#xff0c;"智慧校园"作为教育创新的前沿阵地&#xff0c;正逐步揭开其神秘面纱&#xff0c;引领一场前所未有的教育转型革命。它远超过单纯技术叠加的传统框架&#xff0c;而是深度融合云计算、大数据、物联网等前沿科技&#xff0c;精心…

【计算机毕业设计】基于Springboot的智能物流管理系统【源码+lw+部署文档】

包含论文源码的压缩包较大&#xff0c;请私信或者加我的绿色小软件获取 免责声明&#xff1a;资料部分来源于合法的互联网渠道收集和整理&#xff0c;部分自己学习积累成果&#xff0c;供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者…

【Mac】Auto Mouse Click for Mac(高效、稳定的鼠标连点器软件)软件介绍

软件介绍 Auto Mouse Click for Mac 是一款专为 macOS 平台设计的自动鼠标点击软件&#xff0c;它可以帮助用户自动化重复的鼠标点击操作&#xff0c;从而提高工作效率。以下是这款软件的主要特点和功能&#xff1a; 1.自动化点击操作&#xff1a;Auto Mouse Click 允许用户录…

等保测评过程中会用到哪些工具或服务

等保测评工具和服务概述 等保测评&#xff0c;即信息安全等级保护测评&#xff0c;是一项重要的信息安全工作&#xff0c;它涉及信息系统的技术和管理两个方面&#xff0c;包括物理安全、网络安全、主机安全、应用安全、数据安全等多个维度。等保测评工具和服务是企业进行信息…

神经网络实战2-损失函数和反向传播

其实就是通过求偏导的方式&#xff0c;求出各个权重大小 loss函数是找最小值的&#xff0c;要求导&#xff0c;在计算机里面计算导数是倒着来的&#xff0c;所以叫反向传播。 import torch from torch.nn import L1Lossinputstorch.tensor([1,2,3],dtypetorch.float32) targe…