收藏
回答

小程序真机webview调用选择图片上传,选择图片后会跳转到首页,开发者工具则没有问题?

华为p40pro 微信80.010
// 选择头像
    chooseImg() {
      let that = this;
      let url = window.location.href;
      // if (url.indexOf("/") !== -1) {
      //   url = url.substring(0, url.lastIndexOf("/"));
      // }
      getSignature({ url: url }).then((res) => {
        if (res.success) {
          // 注册微信接口
          that.registerWeChat(res.result);
        }
      });
    },
    // 注册微信接口
    registerWeChat(data) {
      let that = this;
      wx.config({
        // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        debugfalse,
        // 必填,公众号的唯一标识
        appId: process.env.VUE_APP_APP_ID,
        // 必填,生成签名的时间戳
        timestamp: data.timestamp,
        // 必填,生成签名的随机串
        nonceStr: data.nonceStr,
        // 必填,签名
        signature: data.signature,
        // 必填,需要使用的JS接口列表,所有JS接口列表
        jsApiList: [
          "uploadImage",
          "downloadImage",
          "getLocalImgData",
          "chooseImage",
        ],
      });
      wx.ready(function () {
        wx.chooseImage({
          count1// 默认9
          sizeType: ["original""compressed"], // 可以指定是原图还是压缩图,默认二者都有
          sourceType: ["album""camera"], // 可以指定来源是相册还是相机,默认二者都有
          successfunction (res{
            var localIds = res.localIds; // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片
            wx.getLocalImgData({
              localId: localIds[0], // 图片的localID
              successfunction (res{
                var localData = res.localData; // localData是图片的base64数据,可以用img标签显示
                if (localData.indexOf("data:image") != 0) {
                  //判断是否有这样的头部
                  localData = "data:image/jpeg;base64," + localData;
                }
                localData = localData
                  .replace(/\r|\n/g"")
                  .replace("data:image/jgp""data:image/jpeg");
                that.uploadHeader(localData);
              },
            });
          },
        });
      });
      wx.error(function (res{
        alert('错了')
      });
    },
    // base64转换为文件流
    base64toFile(dataurl, filename = "file") {
      let arr = dataurl.split(",");
      let mime = arr[0].match(/:(.*?);/)[1];
      let suffix = mime.split("/")[1];
      let bstr = atob(arr[1]);
      let n = bstr.length;
      let u8arr = new Uint8Array(n);
      while (n--) {
        u8arr[n] = bstr.charCodeAt(n);
      }
      let datas = new File([u8arr], `${filename}.${suffix}`, {
        type: mime,
      });
      return datas;
    },
    // 上传头像
    uploadHeader(fileData) {
      let that = this;
      let files = that.base64toFile(fileData, timestamp());
      this.$nextTick(() => {
        let param = new FormData(); //创建form对象
        param.append("file", files); //通过append向form对象添加数据
        param.append("biz"'temp'); //通过append向form对象添加数据
        uploadFile(param).then((res) => {
          if (res.success) {
            that.updateUserInfo(res.message);
          }
        });
      });
    },
    // 更改用户信息
    updateUserInfo(urls) {
      let that = this;
      let params = {
        avatar: urls,
        id: that.userInfo.id,
      };
      editUserInfo(params).then((res) => {
        if (res.success) {
          that.getUser();
        } else {
          Toast.fail(res.message);
        }
      });
    },

回答关注问题邀请回答
收藏

1 个回答

  • 石页为硕
    石页为硕
    2021-08-19

    chooseImage会触发app.js里的onShow和当前页面的onShow、onHide。是不是在里面写了什么跳转了

    2021-08-19
    有用
    回复 1
    • X
      X
      2021-08-19
      谢谢,我在onShow里面去获取了数据,这个导致了重新跳转了一次webView
      2021-08-19
      回复
登录 后发表内容