前端vue实现各种文件的预览,

公司最近需求当用户实现对文件上传之后,用户需要对所上传的文件进行点击查看当前文件的内容,不同文件的类型太多,对部分文件进行了处理预览,例如:pkl、mps、txt、md、doc、xlsx、pdf、json、csv、py、png、jpg

先说对 [".txt", ".md", ".json", ".pkl", ".mps", ".py"] 

[".txt", ".md", ".json", ".pkl", ".mps", ".py"]预览

这些类的文件本身是对于文件内容文本所预览,如果没有太大的样式追求,推荐使用 VAceEditor 这个插件,

vue3-ace-editor 是一个基于 Ace Editor(流行的 web 前端代码编辑器)封装的 Vue 3 组件库,它允许在 Vue 程序中轻松集成和自定义 Ace 编辑器的功能。

支持多种编程语言的语法高亮、自动补全、主题切换、多语言支持等高级特性,使得开发者能够构建功能丰富的在线代码编辑器或 JSON 格式查看与编辑器等功能。

适用于开发IDE、在线代码编辑器、JSON编辑器等多种应用场景|。

这个是预览出来的结构

一、安装

npm i vue3-ace-editor

                 

自行对aceConfig这些属性可以配置,
当你通过某个事件去触发的时候可以去拿到地址去读取当前文件内容,我这里用某个函数去接受,拿到当前的完整地址发起请求去读取文件流,然后读取内容后追加放到结果中

[".ipynb"];文件预览,

Ipynb文件跟一般文件不一样,这个文件里面会包含图片、代码、文本之类的、预览ipynb文件就需要将文件流转换成html进行预览,

这里要运用到一些插件

npm install marked ansi_up dompurify jsdom
npm install prismjs 
npm install babel-plugin-prismjs 

开源地址:vue-ipynb: Demo to view a .ipynb (python notebook) file with VUE.

它进行预览是通过上传文件拿到文件流的时候进行预览,而我做的是后端返回地址,通过地址发请求读取文件流,

它的开元nb文件某些情况下可能会执行报错,图片可能会预览不出来,我自己稍作了些修改,ipynb文件的图片为统一为base64格式,不然图片就不会显示出来

它的这一块即是我进行修改的地方,

它的nb.parse方法接收的是两个参数我们通过读取文件流之后给的是一个参数,
他源文件这个地方也要修改,不然就会导致底层报错,

如果报错之类的都解决掉了之后,读取文件流之后将转换成html结构,预览出来的效果就是这样的

这个结果就是html形式,

[".doc", ".docx", ".pdf", ".xlsx", ".csv"];

前面四种有专门的插件很好预览,

npm i @vue-office/excel

npm i @vue-office/pdf
npm i @vue-office/docx

这个是模板部分 直接将你完整的地址传递到src属性里面
这个是script里面,你也可以通过不同的末尾去判断显示那个文件

csv文件预览

这个文件预览要用到插件,

papaparse
下载

npm i papaparse

使用这个插件会有一个bug 比如说你的csv文件里面有中文,这个中文预览出来的效果就会是一堆乱码的样子,比如它自带的encoding配置只能对通过input上传的本地文件起作用,而通过URL远程取到的文件不支持

先用XMLHttpRequest()获取到文件,然后再用FileReader()改变文件的编码,最后用PapaParse直接解析

渲染出来的表格是没有边框样式的,可以自行用css进行加

预览出来的效果就是这样

看业务要求,有些文件是无法进行预览,可以商量直接下载

### 实现文件预览 为了实现Vue 项目中的文件预览功能,可以采用不同的方法来处理不同类型的文件。对于常见的文档类文件(如 Word 文档),以及特定格式的文件(如 IPython Notebook 文件 .ipynb),有不同的解决方案。 #### 处理常见文档类文件 针对像 `.doc` 或者 `.docx` 这样的 Microsoft Office 文档,在 Vue 应用程序里可以通过 `docx-preview` 来实现这些文件的在线预览[^2]: ```javascript import DocxPreview from 'docx-preview'; // 假设 response 是来自服务器响应的数据对象 const blob = new Blob([response.data], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' }); DocxPreview(blob); ``` 这段代码展示了如何接收后端传来的二进制数据并将其转化为浏览器能够理解的形式以便于显示出来。 #### 预览 IPython Notebook (.ipynb) 而对于更复杂的结构化笔记本文档比如 Jupyter Notebooks (`.ipynb`) ,由于其内部可能含有丰富的多媒体内容(图像、图表甚至是交互式的 Python 代码片段),因此需要特别对待。通常的做法是先将此 JSON 格式的源码解析为 HTML 片段再嵌入页面中展示给用户看[^1]: ```javascript fetch('/path/to/your/file.ipynb') .then(response => response.json()) .then(notebookJson => { const htmlContent = convertNotebookToJsonHtml(notebookJson); // 自定义函数用于转换逻辑 document.getElementById('notebook-container').innerHTML = htmlContent; }) .catch(error => console.error('Error fetching or processing the notebook:', error)); ``` 这里假设存在一个名为 `convertNotebookToJsonHtml()` 的辅助工具负责把原始 JSON 转换成适合网页渲染的内容形式。 #### 支持更多种类的文件 除了上述提到的例子之外,还有其他许多类型的文件也可以通过相似的方式来进行客户端上的即时查看操作。例如 PDFs, 图片等可以直接利用 `<embed>` 或者 `<iframe>` 标签加载;而 Excel 表格则有专门库支持它们的可视化呈现[^3]. ```html <!-- 对于PDF --> <embed src="data:application/pdf;base64,...base64编码后的pdf..." width="500" height="700"/> <!-- 对于图片 --> <img :src="'data:image/jpeg;base64,' + imageData"/> ``` 以上就是关于怎样在基于 Vue.js 架构的应用内完成各类文件预览的一些指导建议和技术细节说明。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值