微信无法打开xlsx文件_微信小程序 h5下载xlsx 文件

本文介绍了如何处理以base64形式返回的xlsx数据,以便在微信小程序和H5中进行下载。在微信小程序中,通过wx.base64ToArrayBuffer转换并使用getFileSystemManager写入本地,再用wx.openDocument打开。而在H5中,先将base64转为Blob,然后利用URL.createObjectURL生成链接,通过创建a标签实现下载。对于url形式的文件,微信小程序可以直接用downloadFile下载。
摘要由CSDN通过智能技术生成

出于对数据安全的考虑,查询到的表格数据是以base64数据形式返回给到前端,需要前端自行解析处理。如果直接返回www.xxx.xx/aa.xlsx 这种形式就会容易很多。

案例: 如下body字段的数据,就是表格的数据,对其进行展示。

1455e6c0c3de8f33d3d132e6b59745f8.png

base64形式的文件下载处理

微信小程序处理

  • 利用wx.base64ToArrayBuffer(data) 将base64 数据转成ArrayBuffer
  • getFileSystemManager 把数据写入到本地(writeFile)
  • 利用wx.openDocument 打开生成的文件即可。
  const fileReg = /.pdf$|.xlsx$|.doc$|.docx$|.xls$/i;  filename = filename.trim();  if (!fileReg.test(filename)) {    toast("warn 需要设置文件格式,默认打开xlsx");    filename = `${filename}.xlsx`;  }  const _fsm = wx.getFileSystemManager();  _fsm &&    _fsm.writeFile({      filePath: `${wx.env.USER_DATA_PATH}/${filename}`,      data: wx.base64ToArrayBuffer(base64Data),      encoding: "utf8",      success: function(e) {        wx.openDocument({          filePath: `${wx.env.USER_DATA_PATH}/${filename}`,          showMenu: true,          success: function() {},          fail: function() {            toast("文件打开失败");          },        });      },      fail: function(e) {        console.log(e);        if (e && e.errMsg) {          toast((e && e.errMsg) || "文件写入失败");        }      },      complete: function() {},    });

h5 处理

  • 将base64转成Blob
  • 利用URL.createObjectURL 生成链接
  • 创建a链接打开
  function _downloadFileH5(content, fileName) {    let base64ToBlob = function(code) {      let _base64Data = code;      let contentType = "text/plain";      if (code.indexOf(";base64") > -1) {        let _parts = code.split(";base64,");        _base64Data = _parts[1];        contentType = _parts[0].split(":")[1];      }      let raw = window.atob(content);      let rawLength = raw.length;      let uInt8Array = new Uint8Array(rawLength);      for (let i = 0; i < rawLength; ++i) {        uInt8Array[i] = raw.charCodeAt(i);      }      return new Blob([uInt8Array], {        type: contentType,      });    };    let aLink = document.createElement("a");    let blob = base64ToBlob(content);    let evt = document.createEvent("HTMLEvents");    evt.initEvent("click", true, true); //阻止浏览器的默认行为    aLink.download = fileName;    aLink.href = URL.createObjectURL(blob);    aLink.click();  }

url形式的文件下载处理

直接downloadFile 即可

function openFile(fileUrl = "", filename = "table.xlsx") {  // #ifdef H5  window.location.href = fileUrl;  // #endif  // #ifdef MP-WEIXIN  //处理pdf的后缀名  const fileReg = /.pdf$|.xlsx$|.doc$|.docx$|.xls$/i;  filename = filename.trim();  if (!fileReg.test(filename)) {    toast("warn 需要设置文件格式,默认打开xlsx");    filename = `${filename}.xlsx`;  }  wx.downloadFile({    url: fileUrl || "https://b.leka.club/table.xlsx",    filePath: `${wx.env.USER_DATA_PATH}/${filename}`,    success: function(res) {      wx.openDocument({        filePath: res.filePath,        showMenu: true,        success: function() {},        fail: function() {          toast("文件打开失败");        },      });    },    fail: function() {      toast("文件下载失败");    },  });  // #endif}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值