Vue使用OnlyOffice预览文档方案

  1. 服务器安装OnlyOffice ~~ 找后台或运维
  2. OfficePreview.vue
<template><div id="officePreview"></div>
</template><script setup>
import { onMounted } from "vue";const props = defineProps({previewUrl: {type: String,default: "",},previewName: {type: String,default: "文件名字",},
});const getInfo = (url, name) => {var decodedUrl = decodeURIComponent(url);var path = new URL(decodedUrl).pathname;var filename = name || path.split("/").pop();var fileExtension = filename.split(".").pop();var documentType;var paths = path.split("/");var key = paths[paths.length - 2]; // key唯一,由字母数字组成。if (["djvu","doc","docm","docx","docxf","dot","dotm","dotx","epub","fb2","fodt","htm","html","mht","mhtml","odt","oform","ott","oxps","pdf","rtf","stw","sxw","txt","wps","wpt","xml","xps",].includes(fileExtension.toLowerCase())) {documentType = "word";} else if (["csv","et","ett","fods","ods","ots","sxc","xls","xlsb","xlsm","xlsx","xlt","xltm","xltx","xml",].includes(fileExtension.toLowerCase())) {documentType = "cell";} else if (["dps","dpt","fodp","odp","otp","pot","potm","potx","pps","ppsm","ppsx","ppt","pptm","pptx","sxi",].includes(fileExtension.toLowerCase())) {documentType = "slide";} else {documentType = "unknown";}return {filename: filename,fileExtension: fileExtension,documentType: documentType,key: key,};
};const сonnectEditor = () => {console.log("0000123", props.previewUrl);const { filename, fileExtension, documentType, key } = getInfo(props.previewUrl,props.previewName);var config = {document: {fileType: fileExtension,key: key,title: props.previewName || filename,url: props.previewUrl,},documentType: documentType,editorConfig: {mode: "view",},height: "100%",width: "100%",};console.log(config);// eslint-disable-next-linenew DocsAPI.DocEditor("officePreview", config);
};onMounted(() => {if (typeof DocsAPI === "undefined") {const script = document.createElement("script");script.src =process.env.VUE_APP_ONLYOFFICE_DOCUMENTSERVER +"/web-apps/apps/api/documents/api.js";script.async = true;script.addEventListener("load", сonnectEditor);document.head.appendChild(script);} else {сonnectEditor();}
});
</script>
  1. 定义process.env.VUE_APP_ONLYOFFICE_DOCUMENTSERVER
// .env.dev
VUE_APP_FILE_PATH = 'http://192.168.3.208/doc-info'
VUE_APP_ONLYOFFICE_DOCUMENTSERVER = 'http://192.168.3.208:7073'
  1. 路由
{path: "office-preview",name: "office-preview",component: () => import("@/components/office-preview/index.vue"),
},
  1. 预览函数
import router from "@/router";// 预览文件
export const handlePreview = (file) => {if (!file) {return;}const name = file.documentName;const url = (process.env.VUE_APP_FILE_PATH || "") + file.documentUrl;if (!name || !url || !router) return;const lowerCaseName = name.toLowerCase();const suffixName = "." + lowerCaseName.split(".").pop();// 1. 处理文本和文档类型if ([".txt", ".doc", ".docx", ".pdf"].includes(suffixName)) {let routeUrl = router.resolve({name: "office-preview",query: { url, name },});window.open(routeUrl.href, "_blank");return;}// 2. 处理图片和视频类型if ([".png", ".jpg", ".jpeg", ".bmp", ".gif", ".mp4", ".mov"].includes(suffixName)) {window.open(url, "_blank");return;}// 3. 提示不支持的文件类型ElMessage({message: "暂不支持该格式文件预览",type: "warning",});
};
  1. 调试经验
    a. http://192.168.3.205:7073/web-apps/apps/api/documents/api.js 是否能正常访问
    b. http://192.168.3.205:7073 是否能正常上传预览文件
    c. 嵌入后,报这个错表示跨域,请找对应人:Access to fetch at 'http://192.168.3.205:7073/web-apps/apps/api/documents/api.js' from origin 'http://192.168.3.208' has been blocked by CORS policy
    d. 检查文件key是否唯一且为纯字母数字格式。否则导致预览出不来。

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

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

相关文章

Linux--多路转接之epoll

上一篇:Linux–多路转接之select epoll epoll 是 Linux 下多路复用 I/O 接口 select/poll 的增强版本&#xff0c;它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统 CPU 利用率。它是 Linux 下多路复用 API 的一个选择&#xff0c;相比 select 和 poll&#xff0c…

通过梧桐数据库分析客户价值

在现代商业环境中&#xff0c;对客户价值的分析至关重要。通过分析客户的消费行为&#xff0c;企业可以更好地理解其客户群体&#xff0c;并据此制定更有效的市场策略。本文将介绍如何使用SQL查询来分析客户价值&#xff0c;包括计算每个客户的总消费金额&#xff0c;并根据这些…

DevExpress WPF v24.1新版亮点:PDF查看器、富文本编辑器功能升级

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 DevExpress WPF控件日…

1971. 寻找图中是否存在路径

有一个具有 n 个顶点的 双向 图&#xff0c;其中每个顶点标记从 0 到 n - 1&#xff08;包含 0 和 n - 1&#xff09;。图中的边用一个二维整数数组 edges 表示&#xff0c;其中 edges[i] [ui, vi] 表示顶点 ui 和顶点 vi 之间的双向边。 每个顶点对由 最多一条 边连接&#x…

Laravel使用 Swagger

一、Swagger 基础 1、 什么是Swagger Swagger 是一个基于 Open Api 规范的 API 管理工具&#xff0c;通过项目注解的形式自动构建 API 文档&#xff0c;拥有在线调试的功能。提供了多语言的客户端&#xff0c;laravel 中也有相应的扩展包。 二、Swagger 接入 1&#xff0c;用…

第21~22周Java主流框架入门-Spring 3.SpringJDBC事务管理

Spring JDBC模块与事务管理课程总结 1. 课程介绍 本课程主要讲解Spring框架中的JDBC模块及其事务管理的相关内容&#xff0c;重点包括以下三个方面&#xff1a; Spring JDBC模块及核心对象JDBC Template的使用 通过学习如何使用Spring JDBC模块&#xff0c;了解JDBC Template…

Vue3 学习笔记(一)Vue3 介绍及环境部署

一、Vue.js 简介 1、Vue.js 是什么&#xff1f; Vue.js&#xff08;读音 /vjuː/, 类似于 view&#xff09; 是一套构建用户界面的渐进式框架。Vue 只关注视图层&#xff0c; 采用自底向上增量开发的设计。Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件…

【ARM】ARM架构参考手册_Part B 内存和系统架构(2)

目录 2.1 关于系统控制协处理器 2.2 寄存器 2.1 关于系统控制协处理器 所有标准内存和系统设施都由协处理器15&#xff08;CP15&#xff09;控制&#xff0c;因此它被称为系统控制协处理器。有些设施也使用其他控制方法&#xff0c;这些方法在描述这些设施的章节中有描述。例…

【Mysql】-锁,行级锁

Mysql mysql中的行锁 在 MySQL 的 InnoDB 存储引擎中&#xff0c;行级锁通常是加在索引上的&#xff0c;而不是直接加在数据行上。这种机制是基于索引的锁定策略&#xff0c;具体来说&#xff1a; 主键索引&#xff1a;如果查询更新使用了主键进行查找&#xff0c;InnoDB 会直…

性能工具之JMeter 通过Java API生成 BeanShell PreProcessor 脚本

文章目录 一、前言二、实现代码三、代码示例四、最后 一、前言 对于上一篇文章&#xff08;性能工具之 HAR 格式化转换JMeter JMX 脚本文件&#xff09;还是有点问题。大家在使用的情况需要注意。 如果多个接口相同 path 路径且不同参数进行查询如&#xff1a; 上面接口如果…

【力扣 | SQL题 | 每日3题】力扣2988,569,1132,1158

1 hard 3mid&#xff0c;难度不是特别大。 1. 力扣2988&#xff1a;最大部门的经理 1.1 题目&#xff1a; 表&#xff1a; Employees ---------------------- | Column Name | Type | ---------------------- | emp_id | int | | emp_name | varchar | | de…

【前端】如何制作一个自己的网页(15)

有关后代选择器的具体解释&#xff1a; 后代选择器 后代选择器使用时&#xff0c;需要以空格将多个选择器间隔开。 比如&#xff0c;这里p span&#xff0c;表示只设置p元素内&#xff0c;span元素的样式。 <style> /* 使用后代选择器设置样式 */ p span { …

java--多态(详解)

目录 一、概念二、多态实现的条件三、向上转型和向下转型3.1 向上转型3.2 向下转型 四、重写和重载五、理解多态5.1练习&#xff1a;5.2避免在构造方法中调用重写的方法&#xff1a; 欢迎来到权权的博客~欢迎大家对我的博客提出指导这是我的博客主页&#xff1a;点击 一、概念…

Java毕业设计 基于SpringBoot发卡平台

Java毕业设计 基于SpringBoot发卡平台 这篇博文将介绍一个基于SpringBoot发卡平台&#xff0c;适合用于Java毕业设计。 功能介绍 首页 图片轮播 商品介绍 商品详情 提交订单 文章教程 文章详情 查询订单  查看订单卡密 客服   后台管理 登录 个人信息 修改密码 管…

API接口的未来展望:构建更加智能、安全、高效的数字世界

一、引言 随着信息技术的飞速发展&#xff0c;应用程序编程接口&#xff08;API&#xff09;已成为现代软件开发的核心组成部分。API作为不同系统之间的桥梁&#xff0c;使得数据、功能和服务能够在各种平台和设备之间无缝流动。在这个数字化时代&#xff0c;API接口的未来展望…

javascript对象介绍

1. 什么是对象&#xff1f; 在 JavaScript 中&#xff0c;对象是一个无序的键值对集合&#xff0c;可以用来存储数据和功能。对象可以包含原始值、函数&#xff08;方法&#xff09;以及其他对象&#xff0c;是构建复杂数据结构和实现面向对象编程的基础。 2. 创建对象 2.1 …

Selenium爬虫技术:如何模拟鼠标悬停抓取动态内容

介绍 在当今数据驱动的世界中&#xff0c;抓取动态网页内容变得越来越重要&#xff0c;尤其是像抖音这样的社交平台&#xff0c;动态加载的评论等内容需要通过特定的方式来获取。传统的静态爬虫方法难以处理这些由JavaScript生成的动态内容&#xff0c;Selenium爬虫技术则是一…

字典如何与选择器一起使用

背景&#xff1a;开发过程中会遇到某些字段需要做成下拉框。如下图&#xff1a; 组件 | Element里有select选择器这个组件可以实现下拉框的效果 我们可能会想到创一个辅助表来存储这些下拉数据像这样 这样虽然能实现&#xff0c;但是在实际开发中是不合理的&#xff0c;如果有…

个税自然人扣缴客户端数据的备份与恢复(在那个文件夹)

一&#xff0c;软件能够正常打开&#xff0c;软件中的备份与恢复功能 1&#xff0c;备份 您按照下面的方法备份一下哦~ 进入要备份的自然人软件&#xff0c;点击左侧系统设置→→系统管理→→备份恢复&#xff1b; 在备份设置里&#xff0c;点击“备份到选择路径”&#xff0c;…

WebGL编程指南 - 颜色与纹理续

设置纹理坐标&#xff08;initVertexBuffers()&#xff09; 从缓冲区到 attribute 变量的流程&#xff1a; // 顶点坐标 function initVertexBuffers(gl) {// 数据准备let verticesTexCoords new Float32Array([// 顶点坐标&#xff0c;纹理坐标-0.5, 0.5, 0.0, 1.0, -0.5, …