支持 110 种文件预览!兼容 Vue、React、Svelte!

前端做文件预览,基本都踩过坑。

PDF 一个库,Word 一个库,Excel 一个方案,图片视频自己写,压缩包直接下载,复杂一点的 CAD3DGIS 文件,很多项目干脆放弃。

最后功能是能用,但体验很割裂:有的跳出当前 tab,有的打开新页面,有的强制下载,有的样式完全不统一。

说白了,就是能用,但不好用。

最近试了一个库,体验比我预期好很多:Open File Viewer。

它不是单纯做 PDF 预览,也不是又封装一个图片预览组件,而是一个面向 Web 产品的前端文件预览 SDK

核心思路很直接:把各种文件预览统一放进一个可控容器里,让你可以在弹窗抽屉详情页审批流附件中心里直接预览,而不是动不动跳页面或者强制下载。

这点对后台系统很重要。

因为真实业务里的文件预览,往往不只是"打开一个文件"。

它还要处理加载错误不支持格式多文件切换下载全屏搜索打印主题工具栏扩展等一堆细节。

以前这些东西都要自己东拼西凑,现在 Open File Viewer 直接把它们收进一套体系里。

目前它支持:

txt 复制代码
Vanilla JavaScript
React
Vue
Svelte

底层是框架无关的 core,不同框架只是适配层。

也就是说,老项目可以用原生 JS ,新项目可以用 ReactVueSvelte,核心预览能力可以复用。

110 种文件格式覆盖

这个库最吸引人的点,就是格式覆盖足够广。

目前 Open File Viewer 覆盖 110 种文件格式,不是只支持几种常见文件,而是把很多业务系统里经常出现、但前端又很头疼的格式都考虑进去了。

比如:

  • 图片类 :覆盖 jpgpnggifwebpavifsvgbmptiffheicheif 等常见格式。

  • 视频类 :支持 mp4webmmovavimkvflvwmvm3u8 等格式。

  • 音频类 :覆盖 mp3wavoggaacm4aflacopus 等常见类型。

  • 文本 / 代码类 :支持 txtmdjsonyamlxmljstsvuehtmlcsspygors 等格式。

  • PDF / 电子书类 :覆盖 pdfepubxpsoxps 等格式。

  • Office 文档类 :支持 docxrtfodtxlsxcsvpptxodpwpsetdps 等格式。

  • 压缩包类 :覆盖 ziprar7ztargztgzbz2xz 等格式。

  • 邮件类 :支持 emlmsgmbox 等格式。

  • CAD / 工程图纸类 :覆盖 dxfdwgdwfstepstpigesifcskp 等格式。

  • 3D 模型类 :支持 gltfglbobjstlfbxdaeply3mfusdz 等格式。

  • GIS 地理数据类 :覆盖 geojsontopojsonkmlkmzgpxshp 等格式。

  • 设计资产 / 数据文件类 :支持 ttfwoff2psdaiepssqlitewasmparquetavro 等格式。

当然,110 种格式覆盖,不等于每一种都已经做到高保真完美预览。

图片、音视频、文本、代码、PDF 这类基础格式,已经是比较明确的预览能力;

Office、电子书、邮件、压缩包属于基础到增强预览;

CAD3DGIS设计稿这类复杂格式,更偏识别、基础预览和持续增强。

但这个方向是对的。

文件预览本来就不是靠一个库把所有复杂格式一次性做到完美,尤其是 OfficeCAD、设计稿这种格式,本身就很复杂。

真正重要的是先把预览入口容器状态插件协议兜底机制统一起来。

只要底座统一,后面复杂格式就可以继续增强,可以接 WASM,也可以接服务端转换。

自定义工具栏

我觉得它另一个很实用的点,是自定义工具栏

很多预览库 Demo 看着还行,一接业务就不够用了。

默认就几个按钮:下载全屏关闭

可真实系统里,用户预览文件之后,往往还要继续做操作。

比如:

txt 复制代码
看完合同,直接审批
看完资料,直接归档
看完文档,直接收藏
看完附件,直接分享
看完文件,打标签或标记已读

所以工具栏不能写死。

Open File Viewer 的工具栏可以分层定制。你可以只改文案,比如把 Download 改成"下载";

也可以调整按钮顺序,把搜索、下载、分享、审批、全屏按你的业务顺序排好;还可以换图标、增加业务按钮,甚至完全替换整套工具栏。

这对 OA、CRM、ERP、审批系统、网盘、知识库特别有用。

因为这些系统里的文件预览,本质上经常是业务流程的一部分。

工具栏能不能扩展,决定了这个组件到底只是一个 Demo,还是能真正放进业务系统。

插件机制

Open File Viewer 更核心的设计,是插件机制。

以前我们做文件预览,通常是在业务代码里写一堆判断:

txt 复制代码
PDF 走 PDF 逻辑
图片走图片逻辑
Word 走 Word 逻辑
压缩包走压缩包逻辑
都不支持就下载

格式少的时候还能撑住,格式一多就很难维护。

Open File Viewer 把这些能力拆成了插件。

每个插件只负责一类文件,核心只负责识别文件、匹配插件、挂载渲染和处理状态。

内置插件包括:

ts 复制代码
imagePlugin()
videoPlugin()
audioPlugin()
textPlugin()
pdfPlugin()
officePlugin()
archivePlugin()
emailPlugin()
drawingPlugin()
cadPlugin()
model3dPlugin()
gisPlugin()
fallbackPlugin()

这套机制很清晰。

图片交给 imagePlugin(),视频交给 videoPlugin(),文本和代码交给 textPlugin(),PDF 交给 pdfPlugin(),Office 交给 officePlugin(),压缩包交给 archivePlugin(),邮件交给 emailPlugin(),CAD、3D、GIS 也都有对应插件。

更重要的是,它支持自定义插件。

公司内部经常会有一些奇怪格式,比如 .report.logx.schema.flow

以前遇到这种文件,只能在业务代码里硬写判断。现在可以单独写一个插件,把它放进插件列表里,让它优先匹配。

这样主流程不会被污染,业务特殊格式也能独立维护。

这才是文件预览库该有的扩展方式。

写在最后

如果你的项目只是预览一张图片,或者打开一个 PDF,随便找个库也能用。

但如果你做的是长期维护的业务系统,附件类型会越来越多,预览场景会越来越复杂,那 Open File Viewer 很值得看。

它的价值不只是"能预览多少格式",而是把文件预览做成了一套体系:

txt 复制代码
110 种文件格式覆盖
自定义工具栏
插件机制
15+ 内置预览插件
支持自定义插件
支持 Vanilla JS / React / Vue / Svelte
统一容器内预览
统一状态和 fallback

这才是我觉得它好用的地方。

前端文件预览,真的不应该再靠一堆零散库硬拼了。

如果你觉得这个项目对你有帮助,也欢迎去 GitHub 点个 Star 支持一下。

开源项目不容易,大家的每一个 Star,都是继续迭代下去的动力。

  • 官网地址https://open-file-viewer-workspace.void.app/
  • Github 地址https://github.com/xushanpei/open-file-viewer
  • npm 地址https://www.npmjs.com/package/@open-file-viewer/core
相关推荐
西西学代码1 小时前
Flutter---StreamBuilder案例
javascript·windows·flutter
用户69371750013841 小时前
Kimi K3 综合能力处于全球第一梯队
android·前端·后端
anno2 小时前
Agent 新手 Skill 优先级指南:从第一套必装工作流,到专业能力补全
前端·后端
Liora_Yvonne2 小时前
前端请求层到底怎么封?为什么全局 axios 单例越用越难维护
前端
anno2 小时前
别再把文档“一刀切”:用 LangChain.js 做好 RAG 的第一公里
前端·后端
皮卡穆2 小时前
React 中使用 react-org-tree 实现组织结构树
前端·react.js·前端框架
MariaH2 小时前
费曼学习法与effort-learning理论
前端
qiaofugui2 小时前
如何用 Codex 做一次可靠的项目重构:方法、节奏和可复用提示词
前端
涛涛ing2 小时前
前端圈7月大地震:TS 7发布、Bun 11天从Zig迁Rust、Kimi K3登顶、大厂裁员50%
前端
遇乐的果园2 小时前
前端学习笔记-vue列表处理
前端·vue.js·学习