uniapp项目使用 uni.downloadFile 时报错 Refused to get unsafe header "content-disposition"
代码部分
主要流程为,使用uni.downloadFile获取文件的blob地址,然后通过xhr请求该地址获取文件对象,然后通过reader读取他,最后创建一个a标签创建下载
const fileInfo = this.data.stageMore[e.key1].data[e.key2];
if (this.isUrl(e.url)) {
const fileUrl = e.url;
const header = fileUrl.split(":");
let newUrl;
if (header[0] === "http") {
newUrl = `https:${header[1]}`;
}
uni.downloadFile({
url: newUrl,
header: {
"Content-Type": "application/x-www-form-urlencoded",
},
success: function (res) {
const blobUrl = res.tempFilePath;
// 创建一个XMLHttpRequest对象
const xhr = new XMLHttpRequest();
// 打开一个HTTP GET请求,获取blob对象
xhr.open("GET", blobUrl);
// 设置响应类型为blob
xhr.responseType = "blob";
xhr.onload = function () {
// 创建一个FileReader对象
const reader = new FileReader();
// 当FileReader完成读取时,创建一个下载链接并模拟点击下载链接
reader.onload = function (event) {
const link = document.createElement("a");
link.href = event.target.result;
link.download = `${fileInfo.filename}.${fileInfo.fileext}`; // 下载的文件名
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
};
// 读取blob对象为Data URL格式
reader.readAsDataURL(xhr.response);
};
// 发送HTTP请求
xhr.send();
},
fail: function () {
// 下载失败的处理逻辑
console.log("下载失败");
},
});
} else {
window.location.href = e.url;
}
效果部分
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。