最近在做小程序文件下载的的时候遇见的一些问题,电脑端和安卓端均能够执行成功,ios端出现了错误,仔细排查后发现了问题
http响应头问题:当Content-Type为APPLICATION/OCTET-STREAM时,需要从Content-Disposition中获取文件名称信息
- 安卓,windows中Content-Disposition的值为字符串
- ios 中 Content-Disposition的值为数组
// 兼容型写法
if (res.header['Content-Type'] == "APPLICATION/OCTET-STREAM") {
let fileInfo = res.header['Content-Disposition'] || ''
// 针对ios端做特殊处理
if (fileInfo instanceof Array) {
fileInfo = fileInfo[0] || ''
}
if (!fileInfo) {
uni.hideLoading()
uni.showToast({
icon: "error",
title: "保存失败"
})
reject(err)
}
const data = {
data: {
data: res.tempFilePath,
'Content-Disposition': res.header[
'Content-Disposition'],
filename: new Date().getTime() + decodeURI(fileInfo.split(
"filename=")[1])
}
}
return resolve(data);
}
网友评论