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 里的一个应用
我不是做APP开发的,但从问题上看应该有两种解决办法。
第一种对H5页面中的特定按钮做点击事件拦截,然后用APP开发的原生写法来进行文件下载请求。
第二种让后端给你一个文件下载响应的接口,你用APP去布局这个H5的页面,而不是通过内嵌H5,这样也能实现。
我们这边前端通常用VUE来开发APP,我给的接口通常是响应文件下载,VUE中有相关组件,前端可以直接使用。