读取文件内容

667 阅读2分钟

最近有个需求,上传txt文件,读取内容回显。这个网上有现成的,直接用就行,没什么问题。

一、读取txt文件内容

首先整个文件上传标签<input type="file" name="file" id="fileId" @change="check" />

下边是check方法

check(){            var objFile = document.getElementById("fileId")            if ((objFile as any)?.value == "") {                ElMessage.warning('请选择文件')            }            var files = (objFile as any)?.files //获取到文件列表            if (files.length == 0) {                ElMessage.warning('请选择文件')            } else {                for (var i = 0; i< files.length; i++) {                    var nameLiast = files[i]?.name?.split('.')                    var name = nameLiast[nameLiast.length-1]                    if(name?.toLowerCase()!=="txt"){                        ElMessage.warning('请上传txt文件')                        return                    }                    var reader = new FileReader() //新建一个FileReader                    reader.readAsText(files[i], "UTF-8") //读取文件                    reader.onload =  (evt)=> { //读取完文件之后会回来这里                        var fileString = evt?.target?.result // 读取文件内容                        if(!fileString){                            ElMessage.warning('文件内容为空')                        }                        this.form.serial_number = fileString                    }                }            }        }

参考文章链接:www.cnblogs.com/wuhairui/p/…

二、读取word(docx)文件内容

既然txt可以读,那么其他文本文件可以读吗,找了下还真可以(mammoth)。不过使用过程中遇到很多问题,这里记录下。

1、vue-cli 项目下使用

版本情况:vue-cli 5.0.8,"buffer": "^6.0.3", "core-js": "^3.8.3", "mammoth": "^1.5.1", "path": "^0.12.7", "util": "^0.12.4", "vue": "^2.6.14"

  1. 安装mammoth:yarn add mammoth
  2. 引入mammoth:import mammoth from 'mammoth',结果引入就报错

这两个模块找不到,所以手动安装一下:yarn add util path

完了又报一个错

这个需要修改下配置文件

参考链接:www.cnblogs.com/xingqitian/…

这下报错没了  开始往里加代码:<div v-html="serial_number"></div> <button class="upload-btn" style="color:red;"> 上传 <input type="file" name="file" id="fileId" @change="check" /> </button>

check方法:

check() {      var objFile = document.getElementById("fileId")      var files = objFile?.files //获取到文件列表      for (var i = 0; i < files.length; i++) {        var reader = new FileReader() //新建一个FileReader        reader.readAsArrayBuffer(files[i])        reader.onload = (evt) => { //读取完文件之后会回来这里          var data = evt?.target?.result // 读取文件内容          mammoth.convertToHtml({ arrayBuffer: data }).then(r => {            this.serial_number = r.value          }).done()        }      }    },

然后上传doc文件也会报错(mammoth只能上传docx文件)

参考链接:blog.csdn.net/ZMJ_QQ/arti…

然后改传docx文件,这个错误没了,又报buffer找不到

安装buffer:yarn add buffer

main.js中引入

import * as buffer from "buffer";if (typeof window.Buffer === "undefined") {  window.Buffer = buffer.Buffer;}

参考链接:www.cnblogs.com/btxlc/p/165…

终于上传成功了。测试了下,对文本图片(插入图片和手绘)表格支持还可以,像一些特殊符号还有图表类的展示不出来。这里常用的两个方法:

1、mammoth.convertToHtml:字面意思,会转成html,包括图片和表格

2、mammoth.extractRawText:只提取里边的文字内容

还有其他转成markdown(mammoth.convertToMarkdown)等格式的。详细见:blog.csdn.net/xilejie/art…

这个是通过发请求读取的:blog.csdn.net/qq_42697806…

由于我们项目是vite搭建的,所以我又放到vite下试了一遍,报错情况不太一样。

2、vite下使用

版本情况:"vue": "^3.2.21",

首先安装引入会报

找到报错文件221行,

是说这个东西没拿到,再往上找到了获取的地方

这里打印require('stream'),里边确实没有Stream

安装stream:yarn add stream,再打印发现能拿到了

之后是buffer找不到,同上解决完可以正常读取了。

其他文档读取工具:

PDF:Vue-pdf

Word: mammoth.js
Excel: SheetJS

其他参考文章:zhuanlan.zhihu.com/p/425974461