vue2-file-preview-kit

Vue 2 在线文件预览组件,开箱即用,支持图片、PDF、Word(doc/docx)、Excel(xls/xlsx/csv)、PPT(ppt/pptx)、Markdown、代码/文本、音视频等多种文件类型
215
Install
npm install vue2-file-preview-kit
Latest Version:1.0.0
Vue:2
License:MIT
Last Updated:Sep 27, 2026
Links: npm
Maintainer: zhuma1

vue2-file-preview-kit

Vue 2 多类型文件在线预览组件 —— 图片 / PDF / Word / Excel / PPT / Markdown / 代码 / 音视频,一个组件全部搞定。

npm license

纯前端本地解析,无需后端服务。所有解析器(pdf.js、mammoth、SheetJS、pptx-preview、marked、highlight.js 等)已内置打包,运行时零依赖(vue 为 peerDependency)。

功能矩阵

类别 扩展名 解析方案 效果
图片 png / jpg / jpeg / gif / svg / webp / bmp 原生 <img> 缩放适配、居中显示
PDF pdf pdf.js 逐页 Canvas 渲染、页码/缩放/下载工具栏
Word docx mammoth 保留标题、加粗、列表、表格等富文本
Excel xlsx / xls / csv SheetJS 多 Sheet 页签、表格渲染(500 行 × 60 列保护)
PPT pptx pptx-preview 逐页幻灯片缩放渲染
Markdown md / markdown marked + DOMPurify GFM 语法、代码高亮、XSS 消毒
代码 / 文本 js / ts / vue / json / log / txt 等 highlight.js 约 24 种语言高亮、行数统计、一键复制
音频 mp3 / wav / ogg / flac / m4a 原生 <audio> 唱片卡片 + 播放控制
视频 mp4 / webm / mov / ogv 原生 <video> 播放控制、自适应尺寸
旧版 Office doc / dot / ppt / pps / xls / wps / et / dps Office Online 公网 URL 一键在线预览,否则下载引导
未知类型 其他 兜底面板 展示文件信息 + 下载按钮

安装

npm i vue2-file-preview-kit
# 或
yarn add vue2-file-preview-kit

要求 vue ^2.6 / ^2.7。

快速开始

插件方式(全局注册)

import Vue from 'vue'
import VueFilePreviewKit from 'vue2-file-preview-kit'
import 'vue2-file-preview-kit/dist/style.css'

Vue.use(VueFilePreviewKit, {
  // 可选:内网/离线环境必须配置 pdf.js worker 地址
  pdfWorkerSrc: '/static/pdf.worker.min.js'
})
<template>
  <vue-file-preview src="/files/季度报表.xlsx" :height="640" />
</template>

局部注册(按需)

<script>
import { VueFilePreview } from 'vue2-file-preview-kit'
import 'vue2-file-preview-kit/dist/style.css'

export default {
  components: { VueFilePreview }
}
</script>

本地文件(File 对象)

<template>
  <vue-file-preview :file="file" :file-name="file && file.name" />
</template>

<script>
export default {
  data: () => ({ file: null }),
  methods: {
    onPick(e) {
      this.file = e.target.files[0] || null
    }
  }
}
</script>

带鉴权的私有文件

<vue-file-preview
  src="https://api.example.com/files/12345"
  :headers="{ Authorization: 'Bearer <token>' }"
  :with-credentials="true"
  :timeout="30000"
  file-name="合同.docx"
/>

Props

属性 类型 默认值 说明
src string '' 文件地址:http / https / data: / blob: / 相对路径
file File | Blob null 本地文件对象,与 src 二选一
type string '' 显式指定类型(扩展名或类别,如 'xlsx' / 'excel'),优先级最高
fileName string '' 展示用文件名;无扩展名时会自动回退到 src 推断类型
height string | number 600 组件高度(数字按 px 处理)
headers object {} 加载文件时携带的自定义请求头
withCredentials boolean false 请求是否携带凭据(Cookie)
timeout number 60000 请求超时(毫秒)
pdfWorkerSrc string '' pdf.js worker 地址,缺省用全局配置(内置多 CDN 兜底)
showToolbar boolean true 是否显示顶部工具栏
useOnlineViewer boolean true 旧版 Office 是否走 Office Online 预览
viewer string 'auto' 预览模式:auto / local(强制本地解析)/ online(在线预览服务)

Events

事件名 参数 说明
loading-start { name } 开始加载
rendered { category, name, size?, mode?, pageCount?, sheets?, lines? } 渲染完成
error Error(PreviewError,含 code) 加载/解析失败(组件内展示错误面板与重试按钮)
download { name } 用户点击工具栏/错误面板的下载按钮

全局配置

import { setGlobalConfig } from 'vue2-file-preview-kit'

setGlobalConfig({
  pdfWorkerSrc: '/static/pdf.worker.min.js', // pdf.js worker 地址
  textMaxSize: 10 * 1024 * 1024, // 文本类最大渲染体积(默认 10MB)
  pdfMaxPages: 100 // PDF 最大渲染页数(默认 100)
})

类型识别规则

优先级:显式 type > 文件名扩展名 > MIME(Content-Type)> 文件头魔数。

魔数识别覆盖 PDF、PNG、JPEG、GIF、BMP、WEBP、SVG、MP3、WAV、FLAC、OGG、MP4 等,扩展名缺失或错误时也能正确归类。

常见问题与说明

PDF 渲染需要 worker

pdf.js 必须加载 worker 才能解析。组件内置多 CDN 自动兜底链:jsDelivr → npmmirror → unpkg。若运行环境无法访问公网(内网/离线),请将 pdfjs-dist@3.11.174/build/pdf.worker.min.js 拷贝到可访问目录并通过 pdfWorkerSrc(或 setGlobalConfig)指定。

旧版 Office(doc/ppt/xls/wps/et/dps…)

二进制格式浏览器端无成熟解析器。当文件是公网可访问的 http(s) 地址时,组件使用 Office Online 预览服务嵌入展示;否则展示下载引导面板。如需强制本地/在线,可用 viewer="local" / viewer="online"。docx / xlsx / pptx 均为本地解析,无此限制。

音视频播放说明

音视频通过浏览器原生 <video> / <audio> 直接播放远程地址(不整包下载、不受 CORS fetch 限制)。服务器若校验 Referer 或要求鉴权头,需自行保证媒体地址可被浏览器直接访问。通过 file 传入的本地文件会自动转为 blob 播放。

PPTX 兼容处理

部分工具(如 pptxgenjs 等)生成的 pptx 会在 [Content_Types].xml 中登记不存在的部件,导致解析器中断。组件内置 sanitizePptx 预处理,自动剔除无效条目后渲染,兼容此类"脏"文件。

渲染保护

  • PDF 仅渲染前 100 页(可配置)
  • 文本类超过 10MB 只展示下载引导(可配置)
  • Excel 仅渲染前 500 行 × 60 列,超出提示下载

TypeScript

内置完整类型声明(types/index.d.ts),支持 FileCategory、PreviewError、loadResource 等全部导出的类型推导。

工具函数导出

import {
  resolveCategory, // 综合推断文件类别
  sniffCategory, // 魔数识别
  loadResource, // 统一加载(URL / File / Blob)
  decodeText, // 文本解码(UTF-8 严格 → GBK 回退)
  downloadFile, // 统一下载(URL / File / Blob / ArrayBuffer)
  triggerDownload, // 触发浏览器下载
  PreviewError, // 带 code 的错误类型
  formatSize, // 文件体积格式化
  CATEGORIES, // 类别常量
  CATEGORY_META // 类别展示元信息(label/icon/color)
} from 'vue2-file-preview-kit'

浏览器支持

现代浏览器(Chrome / Edge / Firefox / Safari),需支持 ES2015+、Promise、Fetch、Canvas。不支持 IE。

License

MIT

Related Packages

Version History

Version Released Vue License
1.0.0 ^2.6.0 || ^2.7.0 MIT