解决小程序webview中无法上传图片问题

最近被支付宝小程序内嵌H5无法上传图片折磨到没脾气,H5本身上传图片没问题,但是嵌套在小程序中就无法上传。

在调试过程中发现可能是formData参数无法传送给后台造成的,试了很多解决方法都不行,最后只能利用web view通信方法以及与支付宝API相结合来解决。

首先,在H5上传图片时调用my.chooseImage方法:

my.chooseImage({
  chooseImage: 1,
  success: res => {
    const path = res.apFilePaths[0];
    // 成功后将路径发送给小程序
    my.postMessage({'filePath':path})
  }
})

由于在H5中无法使用my.uploadFile方法,所以上传至后台操作需要在支付宝小程序中进行
支付宝小程序接收到路径后,调用my.uploadFile方法进行图片上传

 my.uploadFile({
   url: apiUrl, // 自己的后台地址
   fileType: 'image',
   fileName: 'file', // 参数key值
   filePath: path,
   headers:{
     'accesstoken':app.token  
   },
   success: res => {
     var result = JSON.parse(res.data);
     my.showToast({
       type: 'success',
       content: '上传成功',
       duration: 1000,
     });
     // 向H5发送图片路径
     this.webViewContext.postMessage({'backImgUrl': result.data.url});
   },
   fail: function(res) {
     my.showToast({
       type: 'success',
       content: '上传失败',
       duration: 1000,
       success: () => {
       },
     });
   },
 });

最后,在H5 my.onMessage函数中接收小程序传来的图片地址,进行页面渲染

你可能感兴趣的:(解决小程序webview中无法上传图片问题)