vue3 文件流预览常见文件(xls,xlsx,ptf,txt,img,excel)

一、图片预览

<el-image-viewer v-if="previewLists.length" :url-list="dialogImageUrl" hide-on-click-modal @close="handleClose" />
if (['jpeg', 'png', 'jpg', 'gif', 'bmp', 'tif'].includes(file.ext)) {
			dialogImageUrl.value = window.URL.createObjectURL(new Blob(binaryData));
			dialogVisible.value = true;
		} 

二、txt文件预览

<iframe v-show="['txt'].includes(ext)" :src="dialogImageUrl" frameborder="0" width="100%" height="100%"></iframe>

if (['txt'].includes(file.ext)) {
			dialogImageUrl.value = URL.createObjectURL(new Blob(binaryData));
			// dialogVisiblePreview.value = true;
		}

三、快捷预览使用@vue-office(仅支持docx、.xlsx、pdf)

插件地址:vue-office简介 | vue-office

#docx文档预览组件
npm install @vue-office/docx vue-demi

#excel文档预览组件
npm install @vue-office/excel vue-demi

#pdf文档预览组件
npm install @vue-office/pdf vue-demi

如果是vue2.6版本或以下还需要额外安装 @vue/composition-api

npm install @vue/composition-api

使用代码:

<el-dialog v-model="dialogVisiblePreview" append-to-body style="width: 60%; height: 90%" :title="fileName">
		<div style="height: 80vh; width: 100%">
			<vue-office-excel style="height: 100%; width: 100%" v-if="['xlsx'].includes(ext)" :src="dialogImageUrl" />
            <vue-office-pdf style="height: 100%; width: 100%" v-show="['pdf'].includes(ext)" :src="dialogImageUrl" />
            <vue-office-docx style="height: 100%; width: 100%" v-show="['docx'].includes(ext)" :src="dialogImageUrl" />
        </div>
</el-dialog>
<script lang="ts" setup>
//引入VueOfficeDocx组件
import VueOfficeDocx from '@vue-office/docx'
//引入相关样式
import '@vue-office/docx/lib/index.css'
import VueOfficeDocx from '@vue-office/docx'
import '@vue-office/docx/lib/index.css'
import VueOfficeDocx from '@vue-office/docx'
import '@vue-office/docx/lib/index.css'
const handleView = (file: CommonFileListType) => {
	// const imageExtensions = /\.(png|jpg|jpeg|gif|bmp|tif)$/i;
	fileName.value = file.original || file.storageName;
	ext.value = file.ext;

	//如果是图片可以预览
	// if (imageExtensions.test(name)) {
	getFiles(file.fileId as string).then((response: any) => {
		// eslint-disable-next-line no-console
		console.log(response, file, window.URL.createObjectURL(new Blob(binaryData)), '返回值');
		var binaryData = [] as any;
		binaryData.push(response);
		if (['xls', 'xlsx', 'docx', 'pdf', 'txt', 'pptx'].includes(file.ext)) dialogVisiblePreview.value = true;
		if (['jpeg', 'png', 'jpg', 'gif', 'bmp', 'tif'].includes(file.ext)) {
			dialogImageUrl.value = window.URL.createObjectURL(new Blob(binaryData));
			dialogVisible.value = true;
		} else if (['xls', 'xlsx'].includes(file.ext)) {
			let reader = new FileReader();
			reader.readAsArrayBuffer(response);
			reader.onload = (loadEvent: any) => {
				let arrayBuffer = loadEvent.target.result;
				dialogImageUrl.value = arrayBuffer;
			};
			dialogVisiblePreview.value = true;
		} else if (['docx'].includes(file.ext)) {
			let reader = new FileReader();
			reader.readAsArrayBuffer(response);
			reader.onload = (loadEvent: any) => {
				let arrayBuffer = loadEvent.target.result;
				dialogImageUrl.value = arrayBuffer;
			};
			// dialogVisiblePreview.value = true;
		} else if (['pdf'].includes(file.ext)) {
			let reader = new FileReader();
			reader.readAsArrayBuffer(response);
			reader.onload = (loadEvent: any) => {
				let arrayBuffer = loadEvent.target.result;
				dialogImageUrl.value = arrayBuffer;
			};
			dialogVisiblePreview.value = true;
		} else if (['txt'].includes(file.ext)) {
			dialogImageUrl.value = URL.createObjectURL(new Blob(binaryData));
		}
		loading.value = false;
	});
};
</script>

四、使用xlsx预览(支持.xls、.xlsx)

npm i xlsx
// xls&&xlsx 预览
import XLSX from 'xlsx';
 if (['xls', 'xlsx'].includes(file.ext)) {
			const reader = new FileReader();
			reader.onload = (e: any) => {
				XLSXtableData.value = [];
				const data = new Uint8Array(e.target.result);
				const workbook = XLSX.read(data, { type: 'array' });
				// 获取第一个工作表
				const sheetNameArr = workbook.SheetNames;
				sheetName.value = sheetNameArr;
				sheetNameArr.forEach((sheetName) => {
					XLSXtableData.value.push({
						sheetName: sheetName,
						sheet: XLSX.utils.sheet_to_json(workbook.Sheets[sheetName], { header: 1 }),
					});
				});
				renderData.value = XLSXtableData.value[0].sheet;
			};

			reader.readAsArrayBuffer(response);
		}

五、pdf预览(建议使用支持功能多)

<iframe v-show="['pdf'].includes(ext)" :src="dialogImageUrl" frameborder="0" width="100%" height="100%"></iframe>
if (['pdf'].includes(file.ext)) {
			dialogImageUrl.value = URL.createObjectURL(new Blob(binaryData, { type: 'application/pdf' }));
		}

效果图:

六、PPT格式

PPT官网:https://pptx.js.org/pages/demo3.html

将代码下载到本地引入项目中 下载代码地址:https://gitcode.com/meshesha/PPTXjs/overview?utm_source=csdn_github_accelerator&isLogin=1

引入你下载的代码:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" type="image/svg+xml" href="/favicon.ico" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>vite</title>
    <link rel="stylesheet" href="/lib/css/pptxjs.css" />
    <link rel="stylesheet" href="/lib/css/nv.d3.min.css" />

    <script type="text/javascript" src="/lib/js/jquery-1.11.3.min.js"></script>
    <script type="text/javascript" src="/lib/js/jszip.min.js"></script>
    <script type="text/javascript" src="/lib/js/filereader.js"></script>
    <script type="text/javascript" src="/lib/js/d3.min.js"></script>
    <script type="text/javascript" src="/lib/js/nv.d3.min.js"></script>
    <script type="text/javascript" src="/lib/js/pptxjs.js"></script>
    <script type="text/javascript" src="/lib/js/divs2slides.js"></script>

    <script type="text/javascript" src="/lib/js/jquery.fullscreen-min.js"></script>
  </head>
  <body>
    <div id="app"></div>
    <script type="module" src="/src/main.ts"></script>
  </body>
</html>
<div ref="pptxDom" id="pptxDom" style="height: 100%; width: 100%" v-show="['pptx'].includes(ext)"></div>
if (['pptx'].includes(file.ext)) {
			nextTick(() => {
				$('#pptxDom').pptxToHtml({
					pptxFileUrl: URL.createObjectURL(new Blob(binaryData)), //pptx文件地址
					slidesScale: '100%',
				});
			});
		}

PPT格式转换可能会跟vue的 Object.defineProperty()方法冲突

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用第三方库如`xlsx`来处理和预览xlsxlsx文件。以下是一个使用Vuexlsx预览文件的示例: 首先,安装`xlsx`库: ```bash npm install xlsx ``` 然后,在Vue组件中引入和使用`xlsx`库: ```vue <template> <div> <input type="file" @change="handleFileUpload" accept=".xls,.xlsx"> <table v-if="data"> <thead> <tr> <th v-for="cell in data[0]">{{ cell }}</th> </tr> </thead> <tbody> <tr v-for="(row, index) in data.slice(1)"> <td v-for="cell in row">{{ cell }}</td> </tr> </tbody> </table> </div> </template> <script> import XLSX from 'xlsx'; export default { data() { return { data: null, }; }, methods: { handleFileUpload(event) { const file = event.target.files[0]; const reader = new FileReader(); reader.onload = (e) => { const data = new Uint8Array(e.target.result); const workbook = XLSX.read(data, { type: 'array' }); const worksheet = workbook.Sheets[workbook.SheetNames[0]]; const jsonData = XLSX.utils.sheet_to_json(worksheet, { header: 1 }); this.data = jsonData; }; reader.readAsArrayBuffer(file); }, }, }; </script> ``` 这个示例中,我们创建了一个文件上传的输入框,并监听其`change`事件。当用户选择文件后,我们使用`FileReader`读取文件内容,并将其转换为`Uint8Array`类型。然后,我们使用`XLSX`库的`read`方法将文件内容解析为工作簿对象,并获取第一个工作表的数据。最后,我们使用`XLSX.utils.sheet_to_json`方法将工作表数据转换为JSON格式并赋值给`data`属性,以在模板中显示。 请注意,这只是一个简单的示例,你可能需要根据自己的需求进行适当的修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值