wx.uploadFile({
url: ``,
filePath: res.tempFilePath,
name: 'file',
responseType: 'arraybuffer',
header: {
'content-type': "multipart/form-data",
'accept': 'application/json',
'Authorization': 'Bearer ' + wx.getStorageSync('userIds').token,
},
formData: {},
success(res) {
console.log('res',res)
if (res.statusCode === 200) {
const fileManager = wx.getFileSystemManager();
const FilePath = wx.env.USER_DATA_PATH + "/" + "志愿报告.pdf";
fileManager.writeFile({
filePath: FilePath,
data: res.data,
encoding: "binary", //编码方式
success: res => {
wx.openDocument({ //我这里成功之后直接打开
filePath: FilePath,
showMenu: true,
fileType: "pdf",
success: result => {
wx.hideLoading();
},
fail: err => {
wx.hideLoading();
wx.showToast({
title: '打开文档失败!',
icon: 'none', //默认值是success,就算没有icon这个值,就算有其他值最终也显示success
duration: 2000, //停留时间
})
}
});
},
fail: res => {
wx.hideLoading();
wx.showToast({
title: '导出失败!',
icon: 'none', //默认值是success,就算没有icon这个值,就算有其他值最终也显示success
duration: 2000, //停留时间
})
}
})
} else {
wx.hideLoading();
wx.showToast({
title: '生成失败!',
icon: 'none', //默认值是success,就算没有icon这个值,就算有其他值最终也显示success
duration: 2000, //停留时间
})
}
},
fail(err) {
wx.hideLoading();
wx.showToast({
title: err,
icon: 'none', //默认值是success,就算没有icon这个值,就算有其他值最终也显示success
duration: 2000, //停留时间
})
}
});
后面来的兄弟姊妹们不用折腾了,直接放弃在这个接口返回流直接生成文件吧……
截止当前回复该帖时间,官方那边不知道是为了避规什么漏洞或者就是个bug,又或者小弟我没踩到足够的坑,但目前查找的相关帖子或文档结果都指向:
如果在后台接口侧想通过这个接口返回的流来直接生成文档或其他文件,打开的该文件都是异常的,比如空白、乱码等等。所有的文件流数据返回需要走downloadFile接口返回并生成使用(打开),也就是必须要“两步式”完成,参考一楼里面对话回复的方案,通过downloadFile返回数据流,然后通过api生成对应的文件格式即可。
若最新有变动或有说的不对的,麻烦踢一下我……
找你们后端啊