如何在企微第三方h5应用中下载文件

519 阅读1分钟
问题描述

最近在做企微三方应用时,遇到了这么个需求:在文档系统中点击下载功能。 按在网页中的方法来说,就是获取链接,然后将连接挂在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';
如何使用
  1. 点击下载按钮时,调用接口来获取文件
  2. 获取后创建一个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',
});
  1. 调用saveAs
saveAs(blob);
目前存在的问题

获取doc/docx类型的文档时,无法正确解析其类型,目前还没有解决,有知道的小伙伴可以在评论区评论一下