APP中内嵌H5页面为什么不能下载,求大佬帮忙?

 if (!this.id) return this.$ui.showToast("文件id为空")
      let urls = `${this.downloadAction}?id=${this.id}`;
      axios({
        method: "get",
        url: urls,
        responseType: "blob",
        headers: {
          JSESSIONID: store.getters.sessionId,
        },
      })
        .then((res) => {
          console.log(res);
          let filename = this.name;
          let blob = new Blob([res.data], {
            type: `application/octet-stream`,
          });
          try {
            FileSaver.saveAs(blob, filename);
          } catch (err) {
            this.$ui.showToast("错误:" + err);
          }

(备注:下载需要携带请求头的,只能转化为二进制的)
FileSaver 是下载插件,这个不需要管,
前提是这个下载需要携带请求头,所以要转化为文件流在下载,但是这个在 app 中不行,这个是内嵌在 app 里的一个应用

阅读 5.6k
2 个回答

我不是做APP开发的,但从问题上看应该有两种解决办法。
第一种对H5页面中的特定按钮做点击事件拦截,然后用APP开发的原生写法来进行文件下载请求。
第二种让后端给你一个文件下载响应的接口,你用APP去布局这个H5的页面,而不是通过内嵌H5,这样也能实现。

我们这边前端通常用VUE来开发APP,我给的接口通常是响应文件下载,VUE中有相关组件,前端可以直接使用。

1.该APP壳应该已申请过并具有文件读写权限,才能下载保存东西
2.该APP壳应写有文件保存相关接口,以供网页调用(可网上搜索app壳与网页js进行交互进行了解)
3.手机网页是不存在任何的操控手机文件的权限的,否则很多手机都中毒了..所以只能转交app处理,各大手机浏览器同理、浏览器是一层壳,具有文件读写权限。网页上下载东西,实际上还是要经过壳进行处理才能存到手机的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题