最近被支付寶小程序內嵌H5無法上傳圖片折磨到沒脾氣,H5本身上傳圖片沒問題,但是嵌套在小程序中就無法上傳。
在調試過程中發(fā)現(xiàn)可能是formData參數(shù)無法傳送給后臺造成的,試了很多解決方法都不行,最后只能利用web view通信方法以及與支付寶API相結合來解決。
首先,在H5上傳圖片時調用my.chooseImage方法:
my.chooseImage({
chooseImage: 1,
success: res => {
const path = res.apFilePaths[0];
// 成功后將路徑發(fā)送給小程序
my.postMessage({'filePath':path})
}
})
由于在H5中無法使用my.uploadFile方法,所以上傳至后臺操作需要在支付寶小程序中進行
支付寶小程序接收到路徑后,調用my.uploadFile方法進行圖片上傳
my.uploadFile({
url: apiUrl, // 自己的后臺地址
fileType: 'image',
fileName: 'file', // 參數(shù)key值
filePath: path,
headers:{
'accesstoken':app.token
},
success: res => {
var result = JSON.parse(res.data);
my.showToast({
type: 'success',
content: '上傳成功',
duration: 1000,
});
// 向H5發(fā)送圖片路徑
this.webViewContext.postMessage({'backImgUrl': result.data.url});
},
fail: function(res) {
my.showToast({
type: 'success',
content: '上傳失敗',
duration: 1000,
success: () => {
},
});
},
});
最后,在H5 my.onMessage函數(shù)中接收小程序傳來的圖片地址,進行頁面渲染