安卓端用wx.downloadFile下载的图片、pdf等文件不开启开发者模式返回的是json数据,开启了开发者模式或者使用苹果手机就没有这个问题。
wx.downloadFile({
url: globalData.host + urlPath,
header: {
'request': 'wechat',
'cookie': wx.getStorageSync('sessionId'),
'content-type': 'application/x-www-form-urlencoded'//这个加不加都是一样的情况
},
success: function (res) {
console.log('图片下载返回值', res)
if (res.statusCode === 200) {
resolve({
filePath: res.tempFilePath
})
} else {
resolve({
filePath: "downloadFail"
})
}
},
fail: function (res) {
resolve({
filePath: 'downloadFail'
})
}
})
首次打开小程序不开启开发者模式获取数据后,开启开发者模式不清除缓存的情况下拿到的数据返回值
打开开发者模式后,重新进入小程序,重新走登录页面后就能获取到正确数据
----------------------------------------------------------------------------------------------------
问题出现在登录的时候,强制指定了某个位置的cookie,实际上安卓返回的cookie的位置发生了变化
wx.setStorageSync('sessionId', res.cookies[1].split(';')[0])
因为项目是在其他项目的基础上更改的,登录和下载部分的代码都是一样的,就确认了代码是否一致,没有确定代码是否有问题,
就一直没发现cookie的问题。
还有就是用微信开发者工具的时候去掉cookie进行请求其实是有报错信息的,但是因为报错信息显示的乱码,就只注意到请求失败,
没去关注乱码具体是什么信息,第一次测试的时候也没有关注到去掉cookie返回了json文件,因为只关注了network面板,没看console面板。
后面复盘的时候发现返回的报错信息其实就是安卓端显示的json文件,
但是wx.downloadFile的返回没有具体的返回值,只能看到tempFilePath返回的文件名。
所以为啥vconsole没有network返回面板,如果有network返回面板,感觉问题定位起来会更加容易啊。
总结就是:如果是部分手机用wx.downloadFile下载返回的是json文件,应该考虑一下是不是报错了,可能返回的是报错信息,
不一定就是content-type的设置问题
是不是没有配置下载域名的原因