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.dev
   const source = '/dist/index.html'

   export default {
      name: 'IframeViewer',
      props: {
         url: String,
         file: File,
         name: String,
      },
      mounted() {
         this.sendFileData();
      },
      computed: {
         // 构建完整url
         src() {
            // 文件名称,建议传递,提高体验性
            const name = this.name || '';
            if (this.url) {
               // 直接拼接url
               return `${source}?url=${encodeURIComponent(this.url)}&name=${encodeURIComponent(name)}`
            } else if (this.file) {
               // 直接拼接来源origin
               return `${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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例5-4 Document

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>Document</title> </head><body> <canvas id"cavsElem" width"400" height"600">您的浏览器不支持Canvas…

flutter module打包成framework引入原生工程

Flutter - 将 Flutter 集成到现有项目&#xff08;iOS - Framework篇&#xff09; 本篇文章大幅参考了 caijinglong 大佬的总结文章&#xff1a; 把flutter作为framework添加到已存在的iOS中[1] 用 Flutter 来开发&#xff0c;从来都不可能是新开的一个纯 Flutter 项目&#xf…

【LVGL源码移植环境搭建】

LVGL源码移植&环境搭建 ■ LVGL源码移植■ 下载LVGL源码■ 修改LVGL文件夹■■■■ 视频链接 Ubuntu模拟器环境建置 ■ LVGL源码移植 ■ 下载LVGL源码 LVGL源码 我们以选择v8.2.0为例&#xff0c;选择8.2.0下载 ■ 修改LVGL文件夹 1.我们只需要关注这5个文件即可&…

java常量和kotlin常量

在java中使用final声明常量在kotlin中使用const val声明常量 常量在编译为字节码后会直接把调用常量的地方直接替换为常量值&#xff0c;示例如下&#xff1a; public class ConstDemo {public static final String NAME "Even";private static final int ID 100…

PythonSSTI漏洞

一&#xff0c;python内置PYC反编译&#xff1a; pyc文件&#xff0c;就是python的代码生成的字节码文件&#xff0c;有些类似于Java中的.class文件&#xff0c;pyc文件可以经过本地python解释器进行运行&#xff0c;从而实现跨平台。 也就是说我们得到了.pyc文件&#xff0c;就…

Selenium 隐藏浏览器指纹特征的几种方式

我们使用 Selenium 对网页进行爬虫时&#xff0c;如果不做任何处理直接进行爬取&#xff0c;会导致很多特征是暴露的 对一些做了反爬的网站&#xff0c;做了特征检测&#xff0c;用来阻止一些恶意爬虫 本篇文章将介绍几种常用的隐藏浏览器指纹特征的方式 1. 直接爬取 目标对…

vector的相关概念及常用接口

vector的基本概念 功能&#xff1a; vector容器与数组非常类似&#xff0c;也称单端数组&#xff08;动态数组&#xff09; vector容器的内部结构图示&#xff1a; vector与普通数组之间的区别&#xff1a; vector可以动态扩展&#xff0c;而普通数组是静态空间&#xff0c…

STM32——ADC

STM32——ADC 1.ADC介绍 ADC是什么&#xff1f; 全称&#xff1a;Analog-to-Digital Converter&#xff0c;指模拟/数字转换器! ADC性能指标 量程&#xff1a;能测量的电压范围分辨率&#xff1a;ADC能辨别的最小模拟量&#xff0c;通常以输出二进制数的位数表示&#xf…

openGauss学习笔记-211 openGauss 数据库运维-高危操作一览表

文章目录 openGauss学习笔记-211 openGauss 数据库运维-高危操作一览表211.1 禁止操作211.2 高危操作 openGauss学习笔记-211 openGauss 数据库运维-高危操作一览表 各项操作请严格遵守指导书操作&#xff0c;同时避免执行如下高危操作。 211.1 禁止操作 表1中描述在产品的操…

python二维高斯热力图绘制简单的思路代码

import numpy as np import matplotlib.pyplot as plt from scipy.ndimage import gaussian_filter import cv2# 生成一个示例图像 image_size 100 image np.zeros((image_size, image_size))# 在图像中心创建一个高亮区域 center_x, center_y image_size // 2, image_size …

visual studio2022专业版安装步骤

目录 一、Visual studio下载二、创建C#项目——Hello World三、专业版秘钥激活 一、Visual studio下载 首先进入下载官网 先下载2022专业版&#xff0c;等等后面还需要选环境 我勾选了以下几个和c#开发有关的&#xff0c;后面缺什么还可以再安装所有以少勾了问题也不大 然后…

互联网加竞赛 基于深度学习的人脸表情识别

文章目录 0 前言1 技术介绍1.1 技术概括1.2 目前表情识别实现技术 2 实现效果3 深度学习表情识别实现过程3.1 网络架构3.2 数据3.3 实现流程3.4 部分实现代码 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的人脸表情识别 该项目较…

解密数据清洗,SQL中的数据分析

大家好&#xff0c;数据库表中的数据经常会很杂乱。数据可能包含缺失值、重复记录、异常值、不一致的数据输入等&#xff0c;在使用SQL进行分析之前清洗数据是非常重要的。 当学习SQL时&#xff0c;可以随意地创建数据库表&#xff0c;更改它们&#xff0c;根据需要更新和删除…

《游戏-03_2D-开发》

基于《游戏-02_2D-开发》&#xff0c; 继续制作游戏&#xff1a; 首先要做的时切割人物Idle空闲状态下的动画&#xff0c; 在切割之前我们需要创建一个文件夹&#xff0c;用来存放动画控制器AnimatorContoller&#xff0c; 再创建一个人物控制器文件夹用来存放人物控制器&…

uniapp H5 touchstart touchend 切换背景会失效,或者没用

uniapp H5 touchstart touchend 切换背景会失效&#xff0c;或者没用 直接上代码 &#xff08;使用 class 以及 hover-class来设置样式&#xff09; class 设置默认的背景图或者样式 hover-class 来设置按下的背景图 或者样式 抬起 按下 <view class"mp_zoom_siz…

重写Sylar基于协程的服务器(1、日志模块的架构)

重写Sylar基于协程的服务器&#xff08;1、日志模块的架构&#xff09; 重写Sylar基于协程的服务器系列&#xff1a; 重写Sylar基于协程的服务器&#xff08;0、搭建开发环境以及项目框架 || 下载编译简化版Sylar&#xff09; 重写Sylar基于协程的服务器&#xff08;1、日志模…

力扣hot100 组合总和 回溯 剪枝 组合

Problem: 39. 组合总和 文章目录 思路复杂度&#x1f496; Code 思路 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( n ) O(n) O(n) &#x1f496; Code class Solution{List<List<Integer>> res new ArrayList<>();int x;// 全局targetin…

18.通过telepresence调试部署在Kubernetes上的微服务

Telepresence简介 在微服务架构中,本地开发和调试往往是一项具有挑战性的任务。Telepresence 是一种强大的工具,使得开发者本地机器上开发微服务时能够与运行在 Kubernetes 集群中的其他服务无缝交互。本文将深入探讨 Telepresence 的架构、运行原理,并通过实际的案例演示其…

【Golang】ModbusRTU协议CRC16校验算法

CRC校验码是通过在数据后面附加一个短的校验序列来生成的&#xff0c;用于检测数据在传输过程中是否发生错误。CRC16是一种特定的CRC校验算法&#xff0c;它生成一个16位的校验码。 下面是使用Go语言实现CRC16校验算法的代码&#xff1a; package main import ("encoding…

ASP.NET Core 使用 SignalR 的简单示例

写在前面 ASP.NET SignalR 是一个开源代码库&#xff0c;简化了Web实时通讯方案&#xff0c;可以实时地通过服务端将信息同步推送到各个客户端&#xff0c;可应用于 需要从服务器进行高频更新的应用&#xff1a;包括游戏、社交网络、投票、拍卖、地图和GPS应用&#xff1b; 仪…