news 2026/7/19 1:30:20

File Viewer v2.2.2 实战:208 种文件预览与 Worker/WASM 自托管

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
File Viewer v2.2.2 实战:208 种文件预览与 Worker/WASM 自托管

企业后台的附件预览通常会经历三个阶段:

  1. 先支持 PDF;
  2. 再拼接 Word、Excel、PPT 和图片;
  3. 最后被旧 Office、CAD、压缩包、大文件和内网部署击穿。

File Viewer v2.2.2 的目标,是让这些格式共享同一套组件 API,并把重型 Worker、WASM、字体和 vendor 资源完整交付到自己的网络中。

本文以 Vue 3 + Vite 为例完成接入,再说明非 Vite、子路径和私有化环境应该怎样部署。

1. 先看新版工作台

新版 Demo 重新整理了文件来源、操作工具和预览画布。样例库、最近打开、明暗主题、移动端“更多”入口和?url=沉浸模式都在同一套布局中。

支持矩阵当前包含:

  • 208 个不重复扩展名;
  • 25 条 renderer 预览链路;
  • 54 个 npm 发布目标;
  • 8 个官方 Full 入口:Web、Vue 3、Vue 2.7、Vue 2.6、React、React legacy、Svelte、jQuery。

2. Vue 3 + Vite 完整接入

2.1 安装同版本组件和插件

pnpmadd@file-viewer/vue3-full@2.2.2pnpmadd-D@file-viewer/vite-plugin@2.2.2

Full 包包含完整 renderer 矩阵;Vite 插件负责把对应版本的 Worker、WASM、字体和 vendor 文件发布到构建产物中。

2.2 配置 Vite

import{fileViewerRenderers}from'@file-viewer/vite-plugin'importvuefrom'@vitejs/plugin-vue'import{defineConfig}from'vite'exportdefaultdefineConfig({plugins:[vue(),fileViewerRenderers({copyAssets:true})]})

2.3 在页面中使用

<script setup lang="ts"> import FileViewer from '@file-viewer/vue3-full' </script> <template> <FileViewer url="/files/contract.docx" style="height: 720px" /> </template>

2.4 鉴权接口返回二进制

接口没有公开 URL 时,可以先获取 Blob,再补一个可信文件名:

constresponse=awaitfetch('/api/files/42/download',{headers:{Authorization:`Bearer${token}`}})constblob=awaitresponse.blob()constfile=newFile([blob],'quarter-report.xlsx',{type:blob.type})

文件名用于选择正确 renderer。不要把没有扩展名的下载接口地址直接当作类型依据。

3. 非 Vite 项目怎样交付运行时资源

Webpack、Rspack、Rollup、Vue CLI 和 Umi 项目需要执行 Full 包自带的同版本 CLI:

npx --no-install file-viewer-copy-assets ./public/file-viewer

默认资源地址是<部署基址>/file-viewer/。如果业务使用其他静态目录,可以统一覆盖:

import{setDefaultFullAssetBaseUrl}from'@file-viewer/vue3-full'setDefaultFullAssetBaseUrl('/static/file-viewer/')

需要一起部署的并不只有 JavaScript 入口,还包括:

  • PDF、DOCX、Spreadsheet Worker;
  • PPT/PPTX Worker、WASM 和 CJK 字体;
  • CAD/OCCT Worker 与 WASM;
  • Typst 编译器和字体;
  • Archive、Draw.io、SQLite 等 vendor 资源。

只复制入口 IIFE 或只安装 renderer 代码,不属于完整格式支持。

4. 新支持矩阵怎样理解

办公与版式

DOC/DOCX、XLS/XLSX、PPT/PPTX、PDF、OFD、RTF、ODT、Typst 等格式分别进入对应 renderer。旧.ppt使用独立二进制链路,不复用 PPTX 的 OOXML 解析。

工程、模型与绘图

DWG、DXF、DWF/DWFx、STEP/STP、IGES/IGS、BREP、GDS、XMind、draw.io、Mermaid 等能力按需加载 Worker/WASM/WebGL/SVG。

STEP/IGES/BREP 会通过本地 OCCT Worker/WASM 完成真实三角化,再生成 Three.js 网格,不需要先调用公共转换服务。

压缩包与邮件

ZIP、7Z、RAR、TAR、ISO、APK、CBZ/CBR 等先展示目录;用户点击内部文件后再按需解压,并继续复用统一预览器。EML、MSG、MBOX 支持头信息、正文和附件查看。

文本、媒体与数据资产

代码、日志和大文本使用有界虚拟化;CSV/TSV 自动识别 UTF-8、GBK、GB18030。图片、音视频、PSD、SQLite、Parquet、Avro、字体和 WASM 使用对应按需解析链路。

5. v2.2.x 处理的生产问题

上传 PDF 下载为 0 字节

PDF.js 会把ArrayBuffer转移给 Worker。新版下载逻辑会回退到仍完整的原始File,避免渲染成功后下载空文件。

复杂 DOCX 锚点偏移

@file-viewer/docx升级到 0.3.21,修复 WPS/WPG、图片锚点、嵌套组变换和页面/段落锚点混排造成的巨大空白。

Shadow DOM 与子路径

PPTX 样式会进入实际 ShadowRoot;Worker 不再固定请求根路径。PDF 在全宽、flex grow 和外层滚动容器中的居中缩放也完成修复。

EPUB 依赖安全

EPUB 引擎改为包内懒加载,固定安全 XML DOM 版本,并在发布时执行npm pack、全新安装、npm audit、manifest、哈希和许可证检查。

6. 上线前检查清单

  • 组件、Vite 插件和运行时资产版本一致;
  • 生产环境可以访问/file-viewer/或自定义资产基址;
  • .mjs返回application/javascript
  • Nginx 没有用 HTML fallback 响应 Worker/WASM 文件;
  • 鉴权二进制被包装为带可信文件名的File
  • 使用真实 DOCX、PPT、DWG、压缩包和大文件回归;
  • 未完整支持的 IFC、3DM 等格式向用户显示真实边界;
  • Excel 虚拟表格不强行显示不完整的打印操作。

结语

File Viewer 自研源码与组件包采用 Apache-2.0;完整发行物中的独立运行时和第三方依赖保留各自 LICENSE/NOTICE。v2.2.2 的重点不是简单累计扩展名,而是让每个格式拥有明确 renderer、能力边界和可交付资源。

  • GitHub:https://github.com/flyfish-dev/file-viewer
  • Demo:https://demo.file-viewer.app
  • 文档:https://doc.file-viewer.app
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/19 1:28:50

深入解析GPMC同步访问与WAIT信号:嵌入式内存控制器时序配置实战

1. 项目概述在嵌入式系统开发中&#xff0c;处理器与外部存储器的“对话”效率&#xff0c;直接决定了整个系统的响应速度和性能上限。这种对话并非简单的“喊话”&#xff0c;而是一场需要严格遵循时序协议的精密舞蹈。处理器发出指令&#xff0c;内存控制器则扮演着指挥家的角…

作者头像 李华
网站建设 2026/7/19 1:28:25

鸿蒙 ArkTS 实战:Poetry Feihualing 从诗词飞花令到成绩记录完整解析

鸿蒙 ArkTS 实战&#xff1a;Poetry Feihualing 从诗词飞花令到成绩记录完整解析 前言 Poetry Feihualing 是一个面向 诗词飞花令 的鸿蒙 ArkTS 单页应用。项目代码集中在 Index.ets&#xff0c;通过 State 管理记录列表、输入内容、声音开关和状态提示&#xff0c;并用 ForE…

作者头像 李华
网站建设 2026/7/19 1:26:02

Qt文件对话框开发实战与性能优化指南

1. Qt对话框与文件操作核心解析在桌面应用开发中&#xff0c;文件对话框是最常用的用户交互组件之一。作为跨平台框架的Qt&#xff0c;其QFileDialog类提供了完整的文件系统交互解决方案。不同于简单的文件选择功能&#xff0c;Qt的文件对话框深度整合了平台特性、文件过滤机制…

作者头像 李华
网站建设 2026/7/19 1:25:48

Python实现网站爬虫与倒排索引搜索引擎

1. 项目概述&#xff1a;构建一个网站搜索工具这个课程项目要求我们开发一个能够爬取网站、建立倒排索引并支持关键词搜索的命令行工具。核心目标是让学生深入理解搜索引擎的工作原理&#xff0c;掌握网络爬虫、索引构建和查询处理的实际开发技能。项目选用了专门用于学习网络爬…

作者头像 李华
网站建设 2026/7/19 1:25:28

PySpark Structured Streaming 实时处理 Kafka 数据实战指南

1. 项目概述&#xff1a;为什么一个“Pyspark Kafka Structured Streaming”组合值得花三天时间搭通路如果你正在用 Python 做实时数据处理&#xff0c;又卡在“Kafka 消息一来就丢、Spark Streaming 老是背压崩、窗口计算对不上时间、作业跑两小时就 OOM”这些典型症状上——…

作者头像 李华
网站建设 2026/7/19 1:25:17

Android Activity生命周期详解与最佳实践

1. Activity生命周期概述在Android开发中&#xff0c;Activity作为应用的核心组件&#xff0c;其生命周期管理是每个开发者必须掌握的基础知识。Activity生命周期指的是一个Activity从创建到销毁的完整过程&#xff0c;以及在这个过程中可能经历的各种状态变化。1.1 为什么需要…

作者头像 李华