vue实现文件预览功能

news2024/11/24 13:40:13

目录

一、使用插件预览

1.前端实现在线预览文档

通过联机查看 Office 文档

打开新窗口预览文件

当前页面预览文件

注意事项

在创建好url之后,可能会出现无法打开文档的情况,这时候就需要对照官网的解释来查找问题了,官方文档的解释如下:若您看到错误“很抱歉,由于某种原因我们无法打开该文件”,它意味着无法找到文档或无法显示文档。 可能的原因包括:

2.预览PDF文件

二、使用第三方项目 - 预览

连接:kkFileView

三、vue根据文件名后缀区分


一、使用插件预览

1.前端实现在线预览文档

最近项目开发中需要实现在线预览Word,Excel,PowerPoint格式的文档,网上查找了很多资源,各说纷纭,但是在一一尝试之后只有使用微软的预览接口才能成功,其他的会出现各种各样的问题,现在说下如何使用微软的预览接口来实现该功能

通过联机查看 Office 文档

地址如下:免费版Office Online网页版- 查看编辑Word、Excel、PPT | Office

输入文档地址(可访问资源),点击创建URL按钮就可以生成一个新的链接:https://view.officeapps.live.com/op/view.aspx?src=http://mczaiyun.top/ht/123.xlsx

也就是说在使用的过程中可以通过‘https://view.officeapps.live.com/op/view.aspx?src=’ + url的方式打开

打开新窗口预览文件

// HTML
<a target='_black'  href='https://view.officeapps.live.com/op/view.aspx?src=http://mczaiyun.top/ht/123.xlsx'>预览文件</a>

// JS
let result= "http://xxx.oss-cn-shanghai.aliyuncs.com/report/work.docx?OSSAccessKeyId=LTAI4GGvJTbm7fTKs&Expires=1636425239&Signature=c6xf8qQ5rV78Y%3D"
let url= 'http://view.officeapps.live.com/op/view.aspx?src='+ result
window.open(url,'_target')

当前页面预览文件

<iframe src='https://view.officeapps.live.com/op/view.aspx?src=http://mczaiyun.top/ht/123.xlsx' />

注意事项

在创建好url之后,可能会出现无法打开文档的情况,这时候就需要对照官网的解释来查找问题了,官方文档的解释如下:
若您看到错误“很抱歉,由于某种原因我们无法打开该文件”,它意味着无法找到文档或无法显示文档。 可能的原因包括:

  • 在您提供的 URL 中无法找到任何文档。 请确保您提供正确的 URL。
  • 文档而言太大。Word 和 PowerPoint 文档必须小于 10 兆字节;Excel 必须小于五个兆字节。
  • 文档的保存格式不是 Web 浏览器支持打开的格式。请尝试将您的文档保存为下列格式之一:
    • Word: docx dotx
    • Excel: xlsx、xlsb、xls、xlsm
    • PowerPoint: pptx、 ppsx、 ppt、 pps、 potx、 ppsm
  • 您需要登录或提供密码才能打开该文档。 将文档设为可公开查看。
  • 文档的文件名称包含无效字符。请尝试编码的文件的名称,当您键入文档的 URL 或重命名文件以仅使用字母和数字。
    例如,要编码的 URL,包括与号 (&),您需要键入%26 & 字符。有关 URL 编码的详细信息,也称为为百分比编码,请参阅维基百科的百分比编码。

2.预览PDF文件

上述方法适用于Word,Excel,PowerPoint,但是不适用于PDF文件的预览,想要预览PDF文件,可以通过以下方式进行预览(目前只了解到以下两种方案,后期有新的方案再进行补充):

方法一:使用 vue-pdf 插件来实现

1、先安装 vue-pdf 插件

npm install --save vue-pdf

使用 iframe 方式实现

1、iframe 代码部分

<!-- PDF预览 -->
<el-dialog title="PDF预览" :visible.sync="dialogVisible4" width="70%" append-to-body center>
     <iframe :src="pdfSrc" frameborder="0" style="width: 100%; height: 100%"></iframe>
</el-dialog>

2、data 中定义弹窗的显示字段 dialogVisible4

data() {
    return {
        dialogVisible4: false,
        pdfSrc: '', // 将从后台获取到的 PDF 文件地址赋值给这个字段
    }
}

效果图:

  • a标签直接预览

    <a target='_black'  href='http://mczaiyun.top/ht/4.pdf'>预览PDF文件</a>
    
  • 通过pdf.js插件进行预览一、使用插件预览 

二、使用第三方项目 - 预览

连接:kkFileView

kkFileView为文件文档在线预览解决方案,该项目使用流行的spring boot搭建,易上手和部署,基本支持主流办公文档的在线预览,如doc,docx,xls,xlsx,ppt,pptx,pdf,txt,zip,rar,图片,视频,音频等等

易上手和部署,可以自行去官网查看。

三、vue根据文件名后缀区分

1、 建立公共的js   matchType.js

// 根据文件名后缀区分 文件类型
     function getType(fileName) {
        // 后缀获取
        var suffix = '';
        // 获取类型结果
        var result = '';
        try {
          var flieArr = fileName.split('.');
          suffix = flieArr[flieArr.length - 1];
        } catch (err) {
          suffix = '';
        }
        // fileName无后缀返回 false
        if (!suffix) {
          result = false;
          return result;
        }
        // 图片格式
        var imglist = ['png', 'jpg', 'jpeg', 'bmp', 'gif'];
        // 进行图片匹配
        result = imglist.some(function (item) {
          return item == suffix;
        });
        if (result) {
          result = 'image';
          return result;
        };
        // 匹配txt
        var txtlist = ['txt'];
        result = txtlist.some(function (item) {
          return item == suffix;
        });
        if (result) {
          result = 'txt';
          return result;
        };
        // 匹配 excel
        var excelist = ['xls', 'xlsx'];
        result = excelist.some(function (item) {
          return item == suffix;
        });
        if (result) {
          result = 'excel';
          return result;
        };
        // 匹配 word
        var wordlist = ['doc', 'docx'];
        result = wordlist.some(function (item) {
          return item == suffix;
        });
        if (result) {
          result = 'word';
          return result;
        };
        // 匹配 pdf
        var pdflist = ['pdf'];
        result = pdflist.some(function (item) {
          return item == suffix;
        });
        if (result) {
          result = 'pdf';
          return result;
        };
        // 匹配 ppt
        var pptlist = ['ppt'];
        result = pptlist.some(function (item) {
          return item == suffix;
        });
        if (result) {
          result = 'ppt';
          return result;
        };
        // 匹配 视频
        var videolist = ['mp4', 'm2v', 'mkv'];
        result = videolist.some(function (item) {
          return item == suffix;
        });
        if (result) {
          result = 'video';
          return result;
        };
        // 匹配 音频
        var radiolist = ['mp3', 'wav', 'wmv'];
        result = radiolist.some(function (item) {
          return item == suffix;
        });
        if (result) {
          result = 'radio';
          return result;
        }
        // 其他 文件类型
        result = 'other';
        return result;
     }
 
 export default {
  getType
  }

2、vue页面上调用

const type = '';

if (matchType.getType(item.beforeUrl) === 'image') {
    type = 'image'
} else if (matchType.getType(item.beforeUrl) === 'video') {
    type = 'video'
}

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

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

相关文章

k线图入门精讲

K线图是贵金属技术分析的基础手段&#xff0c;刚入门的投资者应认真学习和理解k线的基础知识&#xff0c;因为有了认识才能分析。然而&#xff0c;多数上班族精力有限&#xff0c;无法耗费大量精力学习&#xff0c;今天小编就为准备了K线入门的“精读班”。 一、K线的作用 K线图…

【node.js】fs\path\http模块的使用 02

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;Node.js的fs\path\http模块的使用&#xff0c;模块化开发概念 目录 一、node.js概念与作…

Java程序员你自己的菜鸟气质霸气侧漏了吗?

对于刚入行的程序员来说&#xff0c;面对各种各样的陌生配置环境和代码库&#xff0c;难免会手忙脚乱&#xff0c;尽显菜鸟本色。 但从啥都需要教的菜鸟到啥都懂的大神程序员&#xff0c;并不简单&#xff0c;这需要牺牲一根又一根宝贵的头发&#xff0c;直到它们肉眼可数。 …

线上服务器CPU占用过高?7步带你搞定

一. 前言在Java开发岗位的面试中&#xff0c;时不时会出现一些运维类的题目&#xff0c;其实这也反映了后端面试的一种趋势。现在企业对后端开发的要求越来越全面&#xff0c;不仅要求我们会写代码&#xff0c;还要我们能够进行部署和运维。今天壹哥就结合一个真实的项目案例&a…

【Linux】Linux权限

权限的概念 限制人的&#xff0c;访问的对象天然可能没有这种“属性”权限&#xff1a;一件事情是否允许被谁“做”。 权限 人 事物属性 Linux上的用户分类 root&#xff0c;超级管理员&#xff0c;几乎可以干任何事情&#xff08;1个&#xff09;普通用户&#xff08;多个&a…

雷电飞机大战游戏|基于Java开发实现雷电飞机大战游戏

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路 关注作者有好处 文末获取源…

【前端】Vue项目:旅游App-(8)city:标签页Tabs动态数据:网络请求axios与request、数据管理store与pinia、各种封装

文章目录目标过程与代码安装相关库封装网络请求相关代码网络请求数据网络请求数据操作封装pinia管理数据并封装tab栏改为动态数据效果本篇总结总代码修改或新建的文件serviceindexmodules的cityrequest的configrequest的indexstoremodules的citymodules的loadingcity.vue参考目…

录屏没有声音怎么办?录屏怎么录声音

相信部分朋友在录制视频时&#xff0c;有出现录制视频没有声音&#xff0c;导致该段视频没有声音而无法播放。录屏怎么录声音&#xff1f;可以使用支持录制声音的专业的电脑录屏软件。今天小编就在这给大家分享在录制视频同时&#xff0c;将声音也录制进去的操作步骤。一、录屏…

【Linux】主函数的三个形参

主函数的形参有三个&#xff1a;argc参数个数&#xff0c;argv参数内容&#xff0c;envp环境变量。其中argc是整型&#xff0c;argv和envp是指针数组&#xff08;存的字符串&#xff09; argv源于我们自己在使用执行命令时传的内容&#xff0c;envp源于程序的父进程&#xff08…

力扣sql入门篇(十)

力扣sql入门篇(十) 1 查找重复的电子邮箱 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 SELECT Email FROM Person GROUP BY Email HAVING count(id)>21.3 运行截图 2 合作过至少三次的演员和导演 2.1 题目内容 2.1.1 基本题目信息 2.1.2 示例…

Java并发编程(六)ExecutorService

ExecutorService invokeAny() he invokeAll() 具有阻塞特性 invokeAny invokeAny 的作用是取得第一个完成任务的结果的值。 如果线程中增加 if (!Thread.currentThread().isInterrupted()) 判断&#xff0c;则会中断这些线程。 其他线程如果抛出 InterruptedException() 异常&a…

从徘徊迷茫到行业精英,社科院与杜兰大学金融管理硕士改变你的人生轨迹

在以“内卷”为主基调的职场环境里&#xff0c;似乎不停地进阶已经成为了职场人的唯一出路。但是&#xff0c;如何在进阶路上冲破职业瓶颈&#xff0c;到达心之所往的理想位置&#xff0c;则没有一个标准的答案。有的职场人士通过考取不同的技能证书来增加自身优势&#xff0c;…

Java Agent 踩坑之 appendToSystemClassLoaderSearch 问题

作者&#xff1a;卜比 本文是《容器中的 Java》系列文章之 2/n&#xff0c;欢迎关注后续连载 &#x1f603; 。 从 Java Agent 报错开始&#xff0c;到 JVM 原理&#xff0c;到 glibc 线程安全&#xff0c;再到 pthread tls&#xff0c;逐步探究 Java Agent 诡异报错。 背景 …

数据分析,你还在单纯地看数据?

企业的数字化意识越来越强&#xff0c;工作中也开始使用各种业务系统来管理业务&#xff0c;管理数据。很多人以为上了业务系统&#xff0c;对数据进行统计了&#xff0c;就是数据分析&#xff0c;这是大错特错的观点&#xff0c;数据分析是通过数据来剖析企业经营管理和业务发…

Using chatbots to scaffold EFL students argumentative writing (论文翻译)

使用聊天机器人来指导学生的议论文写作摘要研究表明&#xff0c;英语作为外语的学生的议论文写作受益于与同龄人的互动。然而&#xff0c;在实践中找到一个理想的对象很困难&#xff0c;聊天机器人被认为是这个问题的潜在解决方案。聊天机器人是人工智能的一种形式&#xff0c;…

Studio One6最新更新教程及安装包下载

Studio One6拥有多达50款原生效果插件&#xff0c;例如Analog Delay延迟插件&#xff0c;除能制作延迟效果外&#xff0c;还提供了制作复古的镶边与和声效果。Rotor插件制作的经典旋转扬声器效果也是非常不错的。这些插件&#xff0c;无论是在用户界面&#xff0c;还是使用体验…

http-serve开启一个服务器

前言在写前端页面中&#xff0c;经常会在浏览器运行HTML页面&#xff0c;从本地文件夹中直接打开的一般都是file协议&#xff0c;当代码中存在http或https的链接时&#xff0c;HTML页面就无法正常打开&#xff0c;为了解决这种情况&#xff0c;需要在在本地开启一个本地的服务器…

70. 爬楼梯

70. 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法可以爬到楼顶。 1 阶 1 阶2 阶 示例 2&am…

如何将python脚本打包成可执行exe文件

如何将python脚本打包成可执行exe文件 前提条件 1. 新建一个python项目&#xff0c;并且配置虚拟环境 2. 安装pyinstaller 打包EXE文件 写一个支持入参的python脚本&#xff0c;打包成exe文件 找一张图片作为exe文件的图标 百度搜索” 在线jpg转cio”,将图片转换成cio格式 …

MySQL基础篇第11章(数据处理之增删改)

1.插入数据 1.1 实际问题 1.2 方式1&#xff1a;VALUES的方式添加 使用这种语法一次只能向表中插入一条数据。 情况1&#xff1a;为表的所有字段按默认顺序插入数据 INSERT INTO 表名 VALUES (value1,value2,....);值列表中需要为表的每一个字段指定值&#xff0c;并且值的…