vue 上传本地文件后预览文件内容(支持txt,xlsx,doc)
安装依赖
npm install xlsx
npm i mammoth --save
引入
import XLSX from 'xlsx'
import * as mammoth from 'mammoth'
<div style="display: flex; justify-content: center;"> <div> <el-button id="file-button" type="primary" @click="handlePreview" style="width: 104px;margin-bottom: 10px">上传文件</el-button> <input type="file" name="file" style="display: none"> <br> <el-button @click="showText()">显示文件内容</el-button> </div> <div> <textarea id="file-textarea" style="width: 500px;height: 500px" /> </div> </div>
handlePreview() { const input = document.querySelector('input[type=file]') input.click() }, showText() { const input = document.querySelector('input[type=file]') if (!input) { this.$notify.error('请先上传文件') } const file = input.files[0] const type = file.name.substring(file.name.lastIndexOf('.') + 1) const reader = new FileReader() if (type === 'txt') { reader.readAsText(file) reader.onload = function() { if (reader.result) { document.querySelector('#file-textarea').innerHTML = reader.result } } } if (type === 'xlsx') { reader.readAsBinaryString(file) reader.onload = (ev) => { try { const data = ev.target.result const workbook = XLSX.read(data, { type: 'binary' }) const wsname = workbook.SheetNames[0] const ws = XLSX.utils.sheet_to_json(workbook.Sheets[wsname])// 生成json表格内容 let str = '' ws.forEach((item) => { str += Object.values(item) + '\n' }) document.querySelector('#file-textarea').innerHTML = str } catch (e) { return false } } } if (type === 'docx') { reader.readAsArrayBuffer(file) reader.onload = e => { const data = reader.result mammoth.extractRawText({ arrayBuffer: data }).then(r => { document.querySelector('#file-textarea').innerHTML = r.value }) } } },
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话