先看微信文档关于下载的解释:
微信下载文件代码示例:
wx.downloadFile({
url: 'https://example.com/audio/123', //仅为示例,并非真实的资源
success (res) {
// 只要服务器有响应数据,就会把响应内容写入文件并进入 success 回调,业务需要自行判断是否下载到了想要的内容
if (res.statusCode === 200) {
let filePath = res.tempFilePath //文件在微信云服务器上的临时地址
}
}
})
这个示例其实是需要后台进行配合处理的,如果下载链接为:https://example.com/audio/123.xls
时候是可以下载下来的,但是如果下载的链接没有后缀,则是下载不下来xls文件。解决办法是提供链接的后台服务器在数据返回的时候将响应值(ContentType)内容改为application/vnd.ms-excel;charset=UTF-8
,例如:
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
问题解析过程
一般来说,后台返回数据都是流文件的格式,响应格式为二进制流(application/octet-stream)。但是微信在获取后,会根据响应格式生成对应的临时文件将它保存在微信临时服务器上。而二进制流生成的文件是以**.bin**结尾的文件,我们拿到这个临时文件地址去打开文档是打不开的。