小程序上传图片相关内容(1/2)

457 阅读2分钟

1)场景:

小程序上传图片,常见于含有:图片识别、证件照处理、意见反馈等功能的小程序。

2)我们之前使用过几种方案:

  1. 使用七牛云上传图片sdk,通过获取token,上传到七牛云图片存储服务器。
  2. 使用腾讯云对象存储小程序sdk,后端通过获取临时token给到前端,上传到对象存储里(阿里云存储没用过,看过文档类似)。
  3. 使用云开发对象存储,返回fileID,小程序可直接使用,管理后台需要使用接口换取临时链接。

3)公司 现在的需求:

  1. 尽可能提升上传性能和小程序性能
  2. 想统一迁移使用腾讯云服务(上传的图片,在管理后台也能查看)

4)重新对比方案:

  1. 七牛云和腾讯云对象存储都需要引入sdk,增加小程序代码包体
  2. 七牛云和腾讯云对象存储均需要维护token,相对麻烦一些
  3. 云开发使用很简单,内置sdk、同时发现可以通过拼接链接,解决临时链接问题,故使用云开发。

5)实现 云开发上传图片:(需开通云开发)

// index.js
Page({
  data: {},
  async selImg() {
    let res = await wx.chooseMedia({ count1 });
    this.uploadImg(res.tempFiles[0].tempFilePath);
  },
  // 拿到临时链接,上传到云开发存储
  async uploadImg(tempFilePath) {
    let cloudPath = `mini/${Date.now()}.jpg`;
    let { fileID } = await wx.cloud.uploadFile({
      cloudPath,
      filePath: tempFilePath,
    });
    // 获取图片https地址,可在html5使用
    this.setData({ imgHttpsthis.fileIDToHttps(fileID) });
  },
  // 图片地址: fileID 转 https
  fileIDToHttps(url) {
    let res = url;
    if (url.indexOf("cloud://") === 0) {
      const first = url.indexOf(".");
      const end = url.indexOf("/", first);
      res =
        "https://" +
        url.slice(first + 1, end) +
        ".tcb.qcloud.la/" +
        url.slice(end + 1, url.length);
    }
    return res;
  },
});

6)防坑小提示:

如果开发环境能上传成功,正式版不能上传成功,2种解决方案:

  1. app.json去掉:  "cloud": true
  2. 配置uploadFile合法域名:cos.ap-shanghai.myqcloud.com

7)使用mp-uploader组件实现上传图片

未写完,将尽快更新