问题描述
最近在做企微三方应用时,遇到了这么个需求:在文档系统中点击下载功能。 按在网页中的方法来说,就是获取链接,然后将连接挂在a标签上,触发a标签点击事件就可以。代码如下:
axios.post('xxxxx', formData, { responseType: 'blob' }).then(resp => {
let url = URL.createObjectURL(resp)
const aLink = document.createElement('a')
aLink.href = url
aLink.setAttribute('download', fileName)
document.body.appendChild(aLink)
aLink.click()
document.body.removeChild(aLink)
})
最开始我就是用的这种方法,结果发现在网页环境下可以正常下载,但是挂在企微下,点击下载按钮没反应!!
解决方法
在查了很多资料后,我选择使用file-saver库,使用方法如下:
安装
npm i file-saver
页面中引用
import { saveAs } from 'file-saver';
如何使用
- 点击下载按钮时,调用接口来获取文件
- 获取后创建一个blob对象
const blob = new Blob([res], { type: fileType[currentFile.value.typeName] })
注意: 此处的fileType一定要指定正确,否则不会调用企微内部自带的office解析,此处先放几个我此次用到的:
const fileType = reactive({
pdf: 'application/pdf',
excel: 'application/vnd.ms-excel',
word: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document;charset=utf-8',
txt: 'text/plain',
jpg: 'image/jpeg',
});
- 调用saveAs
saveAs(blob);
目前存在的问题
获取doc/docx类型的文档时,无法正确解析其类型,目前还没有解决,有知道的小伙伴可以在评论区评论一下