1.xls、xlsx、doc、docx、ppt、pptx、
属于office的预览,可以使用office的预览接口即可(需要考虑安全性)或者插件(file-viewer etc.)
格式:要预览的文件地址='https://view./op/view.aspx?src='+要预览的文件地址
let URL = `https://view./op/view.aspx?src=${encodeURI(filePath)}&name=${encodeURI(fileName)}`//一般打开新窗口预览,利用window.open(URL)//或者<a href={URL} target="_blank" rel="noopener noreferrer" >{fileName}</a>
2.txt
txt文件,利用a标签浏览器本身可以打开,或者使用iframe,但是可能会存在乱码(原因:没有使用utf-8解析),一般charset国内都采用utf-8格式,解决办法--利用接口获取数据,将数据转化为utf-8格式,再操作DOM将其插入节点内即可。
const loadFile = (path) => { let xhr = new XMLHttpRequest()xhr.open('GET', path, false); xhr.overrideMimeType("text/html;charset=utf-8");//默认为utf-8 xhr.send(null);//需要等DOM结构生成或者放在钩子里面即可setTimeout(() => {let preview = document.getElementById("preview");preview.innerText = `${xhr.responseText}`;}, 1000);}
txt文件mimeType使用utf-8下载时可能会产生报错,拉取数据失败,失败原因是拉取的txt文件格式问题,后端那边需要加入一行代码,但是由于是采用的是第三方服务,反馈也需要时间修改,自立更生吧,只能把格式切换为blob数据流就可以拉取,利用返回提取文字
// 最好用 try catch 包裹一下让页面不挂try {axios({method: 'get',url: `${path}?time=${new Date().getTime()}`,responseType: 'blob'}).then(res => {new Response(res.data).text().then(txt => {console.log(txt);});}).catch((error) => {// console.log(error);})} catch (error) {// console.log(error)}
参考文档:前端实现文件在线预览txt,pdf,doc,xls,ppt几种格式 - 思绪在漫游 - 博客园
前端 txt 文件转码方案 - 掘金