返回

wx.canvasToTempFilePath压缩上传图片,iOS发不起请求?玄学来了!

Android

微信小程序 wx.canvasToTempFilePath 压缩上传图片时 iOS 发不起请求?玄学来了!

在开发微信小程序时,使用 wx.canvasToTempFilePath 压缩图片并上传时,你会发现 Android 一切正常,开发工具也没问题,唯独 iOS 不正常。然而,iOS 压缩也成功了,却发不起网络请求,卡在加密步骤,无法执行后续请求方法。真是玄学!

出现问题的原因

经过一番排查,罪魁祸首浮出水面:iOS 微信版本太低 。当 iOS 微信版本低于 7.0.20 时,就会出现这个问题。

解决办法

解决这个问题有两种方法:

  1. 将 iOS 微信版本升级 到 7.0.20 或更高。
  2. 使用 wx.uploadFile() 方法上传图片 ,而不是 wx.request() 方法。

使用 wx.uploadFile() 方法上传图片

使用 wx.uploadFile() 方法上传图片的步骤如下:

// 选择要上传的图片
wx.chooseImage({
  count: 1,
  sizeType: ['compressed'],
  sourceType: ['album', 'camera'],
  success: function(res) {
    const tempFilePath = res.tempFilePaths[0];
    // 获取文件系统管理器
    const fileSystemManager = wx.getFileSystemManager();
    // 临时保存图片到本地
    fileSystemManager.saveFile({
      tempFilePath,
      success: function(res) {
        const savedFilePath = res.savedFilePath;
        // 上传图片
        wx.uploadFile({
          url: 'https://example.com/upload',
          filePath: savedFilePath,
          name: 'file',
          success: function(res) {
            console.log('上传成功');
          },
          fail: function(res) {
            console.log('上传失败');
          }
        });
      },
      fail: function(res) {
        console.log('保存失败');
      }
    });
  }
});

总结

这就是 wx.canvasToTempFilePath 压缩上传图片时 iOS 发不起请求问题的解决办法。现在,iOS 微信版本只要满足要求,你就可以快乐地压缩上传图片了!

常见问题解答

  1. 为什么 iOS 微信版本低于 7.0.20 会出现这个问题?

    答案未知,可能是微信官方的 bug。

  2. 除了使用 wx.uploadFile() 方法,还有其他解决办法吗?

    没有。

  3. 为什么 wx.canvasToTempFilePath 压缩后图片质量会下降?

    因为压缩会减少图片文件的大小。

  4. 如何选择合适的压缩质量?

    根据图片的用途和存储空间要求决定。

  5. 上传图片时遇到错误,怎么办?

    检查文件路径、网络连接和图片格式是否正确。