IOS wx.chooseImage以及wx.uploadImage 失败的一些操蛋事以及解决办法。

公司业务。1,需要获取本地图片显示在页面上   2,填写一系列信息之后把图片及信息提交到后台。

做了之后,安卓机还好,苹果机就有点操蛋了。

遇到的问题:1,ios获取的本地图片显示不出来  2,解决显示问题之后,ios上传不了。

在这里和大家分享一下本人的解决办法。

第一个问题是在百度到的办法,非原创。

通过wx.chooseImage获取到的图片路径在IOS无法显示,通过找文档,发现一个接口用来解决这个问题,

 
wx.getLocalImgData({
localId: '', // 图片的localID
success: function (res) {
var localData = res.localData; // localData是图片的base64数据,可以用img标签显示
}
});
这个接口需要先用 wx.chooseImage 获取到本地图片的id,在把这个id传进去,才能获取到可以显示图片的路径。但是,还是显示不出来。。。。
直接用 res.localData 不行,在百度之后找到办法 加下面一句代码就好了。
localData = localData.replace('jgp', 'jpeg')

第二个问题。IOS无法上传图片到微信服务器。

前面说了,IOS的图片路径是通过getLocalImgData获取的,这样才能显示在页面上面。

wx.uploadImage安卓正常,IOS又失败。。。。

找了半天都没解决掉,文档如下。

wx.uploadImage({
localId: '', // 需要上传的图片的本地ID,由chooseImage接口获得
isShowProgressTips: 1, // 默认为1,显示进度提示
success: function (res) {
var serverId = res.serverId; // 返回图片的服务器端ID
}
});
突然灵机一动,看到 这一句注释,想起自己先前的IOS图片是通过getLocalImgData获取的,试着把先前的图片ID传进来,然后解决了。。。

// 需要上传的图片的本地ID,由chooseImage接口获得

好操蛋的感觉。。。

总结:IOS获取本地图片想要显示 需要通过getLocalImgData才能显示,上传的时候又不能拿这个可显示的图片路径,要用choseImage获取的localId才行。

有没有中枪的。。。

中枪的我在这里贡献出我的经验,希望可以帮到大家。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在使用uni.chooseImage方法选择图片后,可以通过获取到的临时文件路径(tempFilePaths)来进行图片上传。需要注意的是,由于uni-app是基于H5的跨平台开发框架,因此不同平台的文件路径是不同的,需要进行兼容处理。 可以使用uni.uploadFile方法进行图片上传,示例代码如下: ```javascript uni.chooseImage({ success: function (res) { var tempFilePaths = res.tempFilePaths; uni.uploadFile({ url: 'http://example.com/upload', // 上传图片的接口地址 filePath: tempFilePaths[0], // 需要上传的图片临时文件路径 name: 'file', // 文件对应的 key,开发者在服务器端通过这个 key 可以获取到文件二进制内容 success: function (uploadRes) { console.log('上传成功', uploadRes); }, fail: function (err) { console.log('上传失败', err); } }); } }); ``` 需要注意的是,uni.chooseImage方法可能会返回多张图片的临时文件路径,需要根据实际需求进行处理。如果需要同时上传多张图片,可以使用Promise.all方法进行并行上传,示例代码如下: ```javascript uni.chooseImage({ count: 2, // 最多可以选择的图片张数,默认9 sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有 sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有 success: function (res) { var tempFilePaths = res.tempFilePaths; var promiseArr = []; for (var i = 0; i < tempFilePaths.length; i++) { promiseArr.push(uploadImage(tempFilePaths[i])); } Promise.all(promiseArr).then(function (result) { console.log('上传成功', result); }).catch(function (error) { console.log('上传失败', error); }); } }); function uploadImage(filePath) { return new Promise(function (resolve, reject) { uni.uploadFile({ url: 'http://example.com/upload', // 上传图片的接口地址 filePath: filePath, // 需要上传的图片临时文件路径 name: 'file', // 文件对应的 key,开发者在服务器端通过这个 key 可以获取到文件二进制内容 success: function (uploadRes) { resolve(uploadRes); }, fail: function (err) { reject(err); } }); }); } ``` 这样就可以同时上传多张图片,并在所有图片上传完成后进行统一处理。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值