FileViewer纯前端预览项目Vue2 demo

FileViewer 项目Vue2 demo

运行图

本demo基于vue-cli+js+vue2.x构建,如果您需要vue3版本的demo,请前往main分支。

适用于Vue2 + Webpack,本集成方法要求最低Webpack版本为5,也就是Vue Cli Service 5.0.0以上,当然,iframe集成没有任何限制

注意,为了版本稳定性,在iframe集成的场景下,无论是vue2版本还是vue3版本,都建议使用file-viewer3以获得最佳性能。

我们针对该项目进行了深度优化,npm仓库搜索 @flyfish-group/file-viewer就可以找到了,最新的是1.0.4版本。

方式一:iframe集成(推荐)

iframe集成是我们最推荐的集成方式,可以跳过所有的坑,为您的项目快速集成文件预览能力。

源码准备

下载我们的最新版本的file-viewer源码,然后执行npm build build,或者yarn build

构建产物集成

然后将构建后的dist目录拷贝到您项目的public目录下。当然也可以放置到任何项目中。本demo只是演示。

如果您在公网,建议您使用我们的cdn:

https://viewer.flyfish.dev

以获得高效的访问。

如果您在内网,可以完全参照本demo进行实施。

添加iframe标签

您可以实现一个组件,内部包含一个<iframe>标签,接下来您有两种方法进行文件切换。

  1. 使用url控制切换(推荐)

这种方式是最便捷的实现方式,适合有文件链接的方案。如果你的文件是流式传输或者需要用于上传体验,则不适合该方案。

  1. 使用postMessage发送文件数据

    这种方式适合本地上传或者后端返回流式二进制数据。

示例的IframeViewer.vue组件实现如下,该组件同时支持两种文件控制方式,您可以直接集成:

<template><iframe title="文档预览" ref="frame" :src="src" class="iframe-viewer"/>
</template><script>// 查看器的源,当前示例为本源,指定为location.origin即可const viewerOrigin = location.origin;// iframe路径指向构建产物,这里是/,因为放在了public下面// 如果使用cdn,请使用https://viewer.flyfish.devconst source = '/dist/index.html'export default {name: 'IframeViewer',props: {url: String,file: File,name: String,},mounted() {this.sendFileData();},computed: {// 构建完整urlsrc() {// 文件名称,建议传递,提高体验性const name = this.name || '';if (this.url) {// 直接拼接urlreturn `${source}?url=${encodeURIComponent(this.url)}&name=${encodeURIComponent(name)}`} else if (this.file) {// 直接拼接来源originreturn `${source}?from=${encodeURIComponent(viewerOrigin)}&name=${encodeURIComponent(name)}`} else {return source;}}},methods: {// 发送文件数据sendFileData() {this.nextTick(() => {// iframe引用const viewer = this.$refs.frame;if (!viewer || !this.file) return;viewer.onload = () => viewer.contentWindow?.postMessage(this.file, viewerOrigin);})}}}
</script><style scoped>.iframe-viewer {height: calc(100vh - 2px);width: 100%;border: 0}
</style>

方式二: 使用仓库依赖集成

该方案适合有定制化需求,或者想要控制显示样式或者灵活控制渲染的开发需求。

为了您能够快速集成本项目,我们在中央仓库发布了我们的NPM包。具体地址如下:

  • Vue2版本

  • Vue3版本

您可以根据项目架构快速选用组件。

以下是示例代码:

main.js

import Vue from 'vue'
import FileViewer from '@flyfish-group/file-viewer'// 导入样式
import '@flyfish-group/file-viewer/dist/style.css'Vue.use(FileViewer);new Vue({render: h => h(App),
}).$mount('#app')

InnerViewer.vue

<template><div class='simple-view'><file-viewer :url="url" /></div>
</template><script>export default {name: 'InnerViewer',props: {url: String,},}
</script><style scoped>.simple-view {width: 100%;height: calc(100vh - 2px);}
</style>

需要注意的是,内置组件file-viewer支持使用data的方式传入文件的二进制数据,您可以自行从服务器拉取集成。以下是组件API。

属性名类型示例属性描述
fileFile | Blob | ArrayBuffernew Blob(…)支持文件、二进制blob和arraybuffer数组缓存
urlString“https://flyfish.dev/1.docx”支持任意服务器文件url,需要支持跨域访问,即存在cors响应头

开源代码下载:
CSDN下载渠道
开源渠道

开源仓库社区:
https://git.flyfish.dev

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

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

相关文章

13.前端--CSS-盒子模型

1.盒子模型的组成 CSS 盒子模型本质上是一个盒子&#xff0c;封装周围的 HTML 元素&#xff0c;它包括&#xff1a;边框、外边距、内边距、和 实际内容 2.边框&#xff08;border&#xff09; 2.1 边框的使用 1、border设置元素的边框。边框有三部分组成:边框宽度(粗细) 边框…

国网四川宜宾供电公司:基于“RPA+AI”融合技术的电网设备隐患缺陷智能化识别应用

推荐单位&#xff1a;国网四川省电力公司宜宾供电公司 本文作者&#xff1a;杨鑫、唐龙、钟睿、李小航、孙雪冬 摘 要&#xff1a;为推进电力企业生产业务数字化转型&#xff0c;提高基层班组数字化运维水平。本文通过一线班组对变电站视频巡视、设备故障判断应用场景需求分析…

C++-内存管理(1)

1. C/C内存分布 首先我们需要知道&#xff0c;在C中的内存分为5个区。 1. 栈 又叫堆栈 -- 非静态局部变量 / 函数参数 / 返回值等等&#xff0c;栈是向下增长的。 2. 内存映射段 是高效的 I/O 映射方式&#xff0c;用于装载一个共享的动态内存库。用户可使用系统接口 创建…

【2023地理设计组一等奖】基于GIS的桥梁隧道三维建模与可视化

作品介绍 1 设计背景和意义 随着我国基础建设规模不断扩大和深入,构建桥梁可视化管理模型,全面推动智慧桥梁,已成为现代隧道桥梁建设行业的发展趋势。传统的桥梁建模工作需要复杂的算法设计并需要熟练编程实践技能,实现周期长。开发自主知识版权的桥梁建模软件系统或专用插…

在线mockjson

在线mockjson体验地址 在调一个问题的时候&#xff0c;但是问题的数据可能并不能随着想到的场景就变化&#xff0c;譬如说又个数组长度的情况&#xff0c;可能默认的情况下是返回4个元素&#xff0c;但是想要返回为空的时候&#xff0c;如果联系服务给改一下&#xff0c;那么流…

防火墙知识普及详解,使用TOR Router把TOR作为默认网关,增加隐私/匿名性

防火墙知识普及详解,使用TOR Router把TOR作为默认网关,增加隐私/匿名性。 #################### 免责声明:工具本身并无好坏,希望大家以遵守《网络安全法》相关法律为前提来使用该工具,支持研究学习,切勿用于非法犯罪活动,对于恶意使用该工具造成的损失,和本人及开发者…

Abp 从空白WebApplication开始

开发环境&#xff1a;VS2022、.NET6 1、创建项目&#xff1a;BasicAspNetCoreApplication 2、NuGet添加&#xff1a;Volo.Abp.AspNetCore.Mvc和Volo.Abp.Autofac&#xff0c;如下图所示&#xff1a; 3、开始写代码&#xff0c;目录如下图所示&#xff1a; 3.1、添加启动模块Ap…

使用make_grid多批次显示网格图像(使用CIFAR数据集介绍)

背景介绍 在机器学习的训练数据集中&#xff0c;我们经常使用多批次的训练来实现更好的训练效果&#xff0c;具体到cv领域&#xff0c;我们的训练数据集通常是[B,C,W,H]格式&#xff0c;其中&#xff0c;B是每个训练批次的大小&#xff0c;C是图片的通道数&#xff0c;如果是1…

Python网络拓扑库之mininet使用详解

概要 网络工程师、研究人员和开发人员需要进行各种网络实验和测试&#xff0c;以评估网络应用和协议的性能&#xff0c;以及解决网络问题。Python Mininet是一个功能强大的工具&#xff0c;它允许用户创建、配置和仿真复杂的网络拓扑&#xff0c;以满足各种实际应用场景。本文…

Java 面向对象进阶 01(黑马)

static案例代码&#xff1a; 代码&#xff1a; public class Student {private String gender;private String name;private int age;public static String teacherName ;public Student() {}public Student(String gender, String name, int age) {this.gender gender;this.…

[晓理紫]每日论文分享(有中文摘要,源码或项目地址)--大模型、扩散模型、视觉语言导航

专属领域论文订阅 VX 关注{晓理紫}&#xff0c;每日更新论文&#xff0c;如感兴趣&#xff0c;请转发给有需要的同学&#xff0c;谢谢支持 如果你感觉对你有所帮助&#xff0c;请关注我&#xff0c;每日准时为你推送最新论文。 为了答谢各位网友的支持&#xff0c;从今日起免费…

费一凡:土木博士的自我救赎之道 | 提升之路系列(五)

导读 为了发挥清华大学多学科优势&#xff0c;搭建跨学科交叉融合平台&#xff0c;创新跨学科交叉培养模式&#xff0c;培养具有大数据思维和应用创新的“π”型人才&#xff0c;由清华大学研究生院、清华大学大数据研究中心及相关院系共同设计组织的“清华大学大数据能力提升项…

Linux true/false区分

bash的数值代表和其它代表相反&#xff1a;0表示true&#xff1b;非0代表false。 #!/bin/sh PIDFILE"pid"# truenginx进程运行 falsenginx进程未运行 checkRunning(){# -f true表示普通文件if [ -f "$PIDFILE" ]; then# -z 字符串长度为0trueif [ -z &qu…

时序数据库 Tdengine 执行命令能够查看执行的sql语句

curl是 访问6041端口&#xff0c;在windows系统里没有linux里的curl命令&#xff0c;需要用别的工具实现。我在cmd里是访问6030端口 第一步 在安装是时序数据库的服务器上也就是数据库服务端 进入命令窗口 执行 taos 第二步 执行 show queries\G;

jsjiami.v6加解密教学

1. 优点 a. 安全性提升 JavaScript 加密可以有效保护源代码&#xff0c;减少恶意用户的攻击风险。 b. 代码混淆 通过混淆技术&#xff0c;可以使代码变得难以阅读和理解&#xff0c;增加破解的难度。 c. 知识产权保护 对于商业项目&#xff0c;JavaScript 加密有助于保护…

Abp 创建一个WPF的项目

开发环境&#xff1a;VS2022、.NET6 1、创建项目&#xff1a;MyWpfApp&#xff0c;这里不再废话了。 2、NuGet添加&#xff1a; 2.1、Volo.Abp.Autofac 2.2、Serilog.Sinks.File 2.3、Serilog.Sinks.Async 2.4、Serilog.Extensions.Logging 2.5、Serilog.Extensions.Hos…

低功耗蓝牙(BLE) 和 经典蓝牙(SPP) 的区别

低功耗蓝牙(BLE) vs 经典蓝牙(SPP) 区别项低功耗蓝牙(BLE)经典蓝牙(SPP 串行端口协议)蓝牙版本蓝牙版本 > 4.0&#xff0c;又称蓝牙低功耗、蓝牙智能经典蓝牙2.0 或更早版本&#xff0c;经典配对模式在两台蓝牙设备之间建立虚拟串口数据连接&#xff0c;提供一种简单而直接…

DML的原理:一篇文章让你豁然开朗

推荐阅读 给软件行业带来了春天——揭秘Spring究竟是何方神圣&#xff08;一&#xff09; 给软件行业带来了春天——揭秘Spring究竟是何方神圣&#xff08;二&#xff09; 文章目录 推荐阅读DML 数据操纵语言INSERT语句UPDATE语句DELETE语句SELECT语句 DML 数据操纵语言 DML是…

消息中间件RabbitMQ介绍

一、基础知识 1. 什么是RabbitMQ RabbitMQ是2007年发布&#xff0c;是一个在AMQP(高级消息队列协议)基础上完成的&#xff0c;简称MQ全称为Message Queue, 消息队列&#xff08;MQ&#xff09;是一种应用程序对应用程序的通信方法&#xff0c;由Erlang&#xff08;专门针对于大…

sqli-labs部署及sqli-labs靶场第一关

部署 一、环境安装 1.下载phpstudy&#xff0c;下载链接&#xff1a;小皮面板(phpstudy) - 让天下没有难配的服务器环境&#xff01; &#xff0c;傻瓜式的安装过后打开软件进入如下界面&#xff0c;我们开启nginx和mysql &#xff01;&#xff01;&#xff01;&#xff0…