【VUE】 文件预览

【VUE】 文件预览

上传前预览

word文档:docx、doc

核心代码

import {renderAsync} from "docx-preview";
/**
* 渲染docx
* @param buffer
*/
docxRender(buffer) {
    let docxContainer = this.$refs.docxContainer;
    renderAsync(
    buffer, // Blob | ArrayBuffer | Uint8Array, 可以是 JSZip.loadAsync 支持的任何类型
    docxContainer, // HTMLElement 渲染文档内容的元素,
    null, // HTMLElement, 用于呈现文档样式、数字、字体的元素。如果为 null,则将使用 。
    this.docxOptions // 配置
    ).then(res => {
    console.log("res---->", res)
    })
}

源文件

预览文件

Excel表格:xls、xlsx

暂未开发,待后续更新

PowerPoint: ppt

暂未开发,待后续更新

PDF

暂未开发,待后续更新

照片 :jpg、png、gif

核心代码

let fr = new FileReader();
fr.readAsArrayBuffer(this.file.raw);
fr.addEventListener("loadend", (e) => {
  let buffer = e.target.result;
  const bufferUrl = btoa(new Uint8Array(buffer).reduce((data, byte) => data + String.fromCharCode(byte), ''));
  const imgUrl = 'data:image/png;base64,' + bufferUrl;
  that.$refs.imgContainer.src = imgUrl;
}, false);

预览文件

文本文件: txt

核心代码

const blob = new Blob([this.file.raw], {type: "text/html"})
const reader = new FileReader();
reader.onload = (ev) => {
  const content = ev.target.result
  that.$refs.textContainer.innerHTML = content;
}
reader.readAsText(blob);

预览文件

视频 mp4

核心代码

const blob = new Blob([this.file.raw], {type: 'video/mp4'})
const reader = new FileReader();
reader.onload = (ev) => {
    const src = ev.target.result
    that.$refs.mediaContainer.src = src;
}
reader.readAsDataURL(blob); 

预览文件

暂不支持格式 :zip、rar 等等

上传预览代码

传送门:文件上传前预览代码

### 实现 Vue 中的文件预览功能 在 Vue 项目中实现文件预览功能可以通过多种方法完成,具体取决于所需的功能范围以及目标文件类型。以下是几种常见的解决方案及其特点。 #### 使用 `vue-pdf` 插件实现 PDF 预览 如果仅需实现 PDF 文件的在线预览功能,则可以考虑使用 `vue-pdf` 插件。该插件基于 Mozilla 的 PDF.js 库开发,允许开发者轻松集成 PDF 查看器到 Vue 项目中[^1]。安装并引入此插件后,可通过简单的配置加载本地或远程的 PDF 文档。 ```javascript // 安装 vue-pdf npm install vue-pdf // 在组件中使用 <template> <div> <pdf :src="pdfUrl"></pdf> </div> </template> <script> import pdf from &#39;vue-pdf&#39; export default { components: { pdf }, data() { return { pdfUrl: &#39;/path/to/your/file.pdf&#39; // 替换为实际路径 } } } </script> ``` --- #### 使用 `@vue-office` 组件库支持多格式文件预览 对于更复杂的需求,比如需要同时处理 Word (.docx)、Excel (.xlsx) 和 PDF 文件预览,可以选择 `@vue-office` 系列组件库。这些工具分别针对不同类型的文档提供了解决方案,并兼容 Vue 2 和 Vue 3 版本[^2]。 ##### 安装依赖 根据需求选择对应的子包: - **Word 预览**: `npm install @vue-office/docx vue-demi` - **Excel 预览**: `npm install @vue-office/excel vue-demi` - **PDF 预览**: `npm install @vue-office/pdf vue-demi` ##### 示例代码 (以 Docx 预览为例) ```javascript // 安装完成后,在组件中导入相应模块 <template> <vue-docx-viewer :file-url="wordFile" /> </template> <script> import { defineComponent } from &#39;vue&#39; import { VueDocxViewer } from &#39;@vue-office/docx&#39; export default defineComponent({ name: &#39;App&#39;, components: { VueDocxViewer }, setup() { const wordFile = &#39;/path/to/your/document.docx&#39;; // 设置文件地址 return { wordFile }; } }) </script> ``` --- #### 不借助第三方插件的手动实现 PDF 预览 如果不希望通过额外的插件来增加项目的负担,也可以采用纯前端的方式手动解析和渲染 PDF 文件。这种方法通常涉及发起 HTTP 请求获取文件数据流,并将其转换为浏览器可识别的内容对象 URL[^3]。 ```javascript <template> <embed v-if="pdfSrc" :src="pdfSrc" type="application/pdf" width="100%" height="600px"/> </template> <script> export default { data() { return { pdfSrc: &#39;&#39; } }, methods: { async fetchAndShowPdf() { try { const response = await this.$http.get(&#39;/api/path-to-pdf&#39;, { responseType: &#39;blob&#39; }); const blob = new Blob([response.data], { type: &#39;application/pdf;charset=utf-8&#39; }); this.pdfSrc = window.URL.createObjectURL(blob); } catch (error) { console.error(&#39;Failed to load PDF:&#39;, error); } } }, created() { this.fetchAndShowPdf(); } }; </script> ``` 上述代码片段展示了如何利用 Axios 发起 GET 请求下载 PDF 数据,并通过 `<embed>` 标签展示最终结果。 --- ### 总结 无论是选用成熟的开源插件还是自行编写逻辑,Vue 提供了灵活的方式来满足各种场景下的文件预览需求。每种方法都有其适用场合——简单快速部署时优先考虑现有框架;而当追求极致性能优化或者特殊定制化效果时,则可能更适合手写部分核心流程。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值