<!--* @Author: 赵成刚* @Date: 2022-04-29 11:05:23* @LastEditors: 赵成刚* @LastEditTime: 2022-05-25 16:38:10* @FilePath: \tz-purchase-web\src\components\AttachmentManagement\components\preview.vue* @Description: 预览组件* Copyright (c) ${2022} by ChenYu/天智AgileTeam, All Rights Reserved.
-->
<template><BasicModalv-bind="$attrs"@register="registerModal":title="''":width="900":showOkBtn="false":showCancelBtn="false"destroyOnClose><PageWrapper contentClass="flex"><!-- 文档 --><template v-if="getFileType(preview.fileName) == 2"><div ref="docxfile"></div></template><!-- 表格 --><template v-if="getFileType(preview.fileName) == 3"><div id="xlsxfile" ref="xlsxfile"></div></template><!-- pdf--><template v-if="getFileType(preview.fileName) == 1"><iframe :src="preview.fileurl" width="100%" height="100%" frameborder="0"> </iframe></template><!-- 图片 --><template v-if="getFileType(preview.fileName) == 4"><img :src="preview.fileurl" style="height: 500px; text-align: center" /></template><!-- txt --><template v-if="getFileType(preview.fileName) == 5"><div>{{ txtfile }}</div></template></PageWrapper></BasicModal>
</template><script lang="ts" setup>// 引入axios用来发请求import axios from 'axios';// 引入docx-preview插件import { renderAsync } from 'docx-preview';// 引入xlsx插件import * as XLSX from 'xlsx';import { PageWrapper } from '/@/components/Page';import { reactive, ref } from 'vue';import { BasicModal, useModalInner } from '/@/components/Modal'; //弹窗const [registerModal, { setModalProps }] = useModalInner(async (data) => {preview.fileurl = data.url;preview.fileName = data.fileName;typeDifferentiation(data);setModalProps({ confirmLoading: false });});const docxfile = ref(null);const xlsxfile = ref(null);const txtfile = ref('');const preview = reactive({pageNum: 1,pageTotalNum: 1, // 总页数loadedRatio: 0, // 当前页面的加载进度,范围是0-1 ,等于1的时候代表当前页已经完全加载完成了fileurl: '',fileName: '',});/*** 获取文件类型* @return {null|number}*/function getFileType(val) {let fileName = val.lastIndexOf('.'); //取到文件名开始到最后一个点的长度let fileNameLength = val.length; //取到文件名长度let fileFormat = val.substring(fileName + 1, fileNameLength); //截if (fileFormat.toLowerCase() === 'pdf') {return 1;} else if (fileFormat.toLowerCase() === 'docx' || fileFormat.toLowerCase() === 'doc') {return 2;} else if (fileFormat.toLowerCase() === 'xlsx' || fileFormat.toLowerCase() === 'xls') {return 3;} else if (fileFormat.toLowerCase() === 'png' ||fileFormat.toLowerCase() === 'jpg' ||fileFormat.toLowerCase() === 'jpeg' ||fileFormat.toLowerCase() === 'gif') {return 4;} else if (fileFormat.toLowerCase() === 'txt') {return 5;} else if (fileFormat.toLowerCase() === 'ppt' || fileFormat.toLowerCase() === 'pptx') {return 6;}return null;}//类型区分function typeDifferentiation(data) {if (getFileType(data.fileName) == 2) {axios({method: 'get',responseType: 'blob', // 因为是流文件,所以要指定blob类型url: data.url, // 自己的服务器,提供的一个word下载文件接口}).then(({ data }) => {renderAsync(data, docxfile.value); // 渲染到页面});}if (getFileType(data.fileName) == 3) {axios({url: data.url,method: 'get',responseType: 'arraybuffer',}).then((res) => {var data = new Uint8Array(res.data);var workbook = XLSX.read(data, { type: 'array' });readWorkbook(workbook);});}if (getFileType(data.fileName) == 5) {axios({method: 'get',responseType: 'blob', // 因为是流文件,所以要指定blob类型url: data.url, // 自己的服务器,提供的一个word下载文件接口}).then(({ data }) => {data.text().then((res) => {txtfile.value = res;});});}}//  读取excel文件流-开始-function readWorkbook(workbook) {var sheetNames = workbook.SheetNames; // 工作表名称集合var worksheet = workbook.Sheets[sheetNames[0]]; // 这里我们只读取第一张sheetvar csv = XLSX.utils.sheet_to_csv(worksheet);xlsxfile.value.innerHTML = csv2table(csv);}function csv2table(csv) {var html = "<table   class='table'>";var rows = csv.split('\n');rows.pop(); // 最后一行没用的rows.forEach(function (row, idx) {var columns = row.split(',');columns.unshift(idx + 1); // 添加行索引if (idx === 0) {// 添加列索引html += '<tr bgcolor="#ebeffb">';for (var i = 0; i < columns.length; i++) {html += '<th >' + (i === 0 ? '' : String.fromCharCode(65 + i - 1)) + '</th>';}html += '</tr>';}html += '<tr>';columns.forEach(function (column) {html += '<td>' + column + '</td>';});html += '</tr>';});html += '</table>';return html;}//  读取excel文件流-结束-
</script>

终极解决方案
kkfileview

1.需要后台搭建服务
2.前端vue页面使用
2-1.import { Base64 } from 'js-base64';
2-2. window.open('http://www.sxjbjt.com:19504/bulk-purchase/fileview/onlinePreview?url=' + encodeURIComponent(Base64.encode('文件地址')));

vue多附件预览(.pdf\.docx\.xlsx\.txt)相关推荐

  1. vue项目中预览pdf文件

    一.利用浏览器自带的预览pdf // [pdfUrl] 获取pdf地址 eg:http://mozilla.github.io/pdf.js/web/compressed.tracemonkey-pl ...

  2. vue预览doc,docx,xlsx,pdf等文件方法

    1.用微软的链接:不好用,文件地址得是公网的 var officrUrl = https://view.officeapps.live.com/op/view.aspx?src=文档绝对路径 2.和微 ...

  3. php+预览和下载pdf文件,vue实现在线预览pdf文件和下载(pdf.js)

    最近做项目遇到在线预览和下载pdf文件,试了多种pdf插件,例如jquery.media.js(ie无法直接浏览) 最后选择了pdf.js插件(兼容ie10及以上.谷歌.安卓,苹果) 强烈推荐改插件, ...

  4. vue实现打印预览pdf(window.open)

    打开接口地址,这个方法是后端已经写好打印window.print(); 前端就只需要打开这个网页地址即可,类型需要是html window.open(res.request.responseURL,& ...

  5. 前端在线预览PDF文件

    如何在vue项目中预览PDF格式的文件 需求:在vue3.x项目中预览pdf文件 提供以下三种方案: 1.Vue-pdf:适用于vue2.x版本,vue3.x需要改一些源码(vue2.x项目极力推荐, ...

  6. 【Vue实用功能】Vue实现文档在线预览功能,在线预览PDF、Word、Excel、ppt等office文件

    文章目录 @[TOC](文章目录) 方法一. Luckysheet 预览 方法二. Office Web 查看器(微软的开发接口) 方法三. XDOC文档预览云服务(预览pdf.word.xls.pp ...

  7. PDF.js + Vue 浏览器以只读方式打开PDF,后台返回文件流,前端实现预览pdf

    如果你想光前端完成 office(xls,doc,ppt) 文件的预览,只能提供你这些库来使用 PDF http://mozilla.github.com/pdf.js/ XLS https://gi ...

  8. fis3+vue+pdf.js制作预览PDF文件或其他

    人生第一篇博客,的确有点紧张,但有些许兴奋,因为这对于我来说应该是一个好的开始,以此励志在技术的道路上越走越远. 看过了多多少少的技术博客,给自己带来了很多技术上的收获,也因此在想什么时候自己也可以赠 ...

  9. Vue中使用pdfJs预览PDF、图片

    Vue中使用pdfJs预览PDF.图片 pdf.js是一个使用HTML5构建的可移植文档格式库.它可以帮助我们在浏览器中构建pdf文档,实现在线查看pdf文件的功能. 实现步骤如下: 1.下载pdfJ ...

最新文章

  1. sparkcore分区_Spark学习:Spark源码和调优简介 Spark Core (二)
  2. vs2005sp1安装加速
  3. POJ1719行列匹配
  4. 设计模式学习笔记(9)——代理模式
  5. 非常好的bert中文预训练资料
  6. linux iptables 如何设置允许几个 ip访问,Linux防火墙iptables限制几个特定ip才能访问服务器。...
  7. AAAI-2020 || 52篇深度强化学习accept论文汇总
  8. Linux环境下搭建FTP服务器
  9. 操作系统复习题+最终版
  10. bash: telnet: command not found...
  11. MATLAB数学建模方法与实践(第3版)——读书笔记
  12. Real-Time Rendering——18.5 Multiprocessing多处理
  13. Java 2.1(将摄氏温度转换为华氏温度)编写程序,从控制台读入double型摄氏温度,然后将其转换为华氏温度,并显示结果。
  14. mes系统服务器架构,MES系统-#网络架构图.pdf
  15. Mysql创建事件执行任务
  16. ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.
  17. 微信小程序 修改 radio 默认 样式
  18. CorelDRAW2023新增了哪些功能?
  19. Android 10.0热点为Enhanced Open模式时不允许WiFI和热点同时开启代码流程梳理
  20. [POI2007]立方体大作战tet

热门文章

  1. leetcode 91 解码方法 动态规划 递推
  2. 有趣的QQ签名(值得借鉴哦 !)
  3. android 电脑屏幕扩展,Windows 有一个自带功能,帮你轻松实现大屏、小屏无线扩展...
  4. 【Java中常用的集合类】
  5. windows下火狐浏览器中配置kerberos客户端
  6. 物联网卡是什么东西?物联网卡能用在手机上吗?
  7. 记账方法以及工具推荐,带你走向暴富之路
  8. 把视频中间的某一段视频截取出来 视频片段截取的简单方法推荐
  9. 开源部门文件服务器,开源文件服务器
  10. 别被带偏的np.pad()