收藏
回答

wx.uploadfile使用偶发性报错

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug wx.uploadFile 微信iOS客户端 8.0.24 2.24.7

你们好,微信官方

目前在一个月前我们已经断断续续提过几次问题给你们,主要都是因为wx.uploadfile使用出现报错问题导致的

我们在图片上传位置添加了实时日志,可以看出来通过uploadfile接口上传图片还没有到后台接受图片就出现了错误

具体的错误编码 600005 600003 600001

出现的情况都是偶发性的,没有任何规律 

出现的机型也都不确定,大部门集中在ios 和华为的系统上 

目前我们已经反馈了几次 都没有得到很好的回复和解决方案,用户客户端的日志我们也上传过几次,但是还是没有得到很好的解决办法

能否邀请技术人员拉群和我们一群联调读取数据看一下,帮助我们解决问题,我们愿意全力配合


谢谢 

https://developers.weixin.qq.com/community/develop/doc/000aacb7344c5097963e0aaa056400


https://developers.weixin.qq.com/community/develop/doc/000664a276c970f7043ed1e1756000

代码片段


// 这是上传图片的方法
  BFXJCTEMPuploadImage: function () {
    let mustCheckVisitData = this.data.visitProcess.getModuleSaveData(visitConfig.visitProcessStep.BFXJC);
    let _processData = this.data.visitProcess.getVisitProcessState(visitConfig.visitProcessStep.BFXJC);
    let imgListPath = _processData['imgList'] || []
    logger.info('imgListPath', imgListPath);
    //已经走到了这里 这里显示的是日志是
    // [10:02:39]  imgListPath [{"key":"wxfile://tmp_65d9ea6f75871aab42a70fc4eb211ea8.jpg","materielCheckCd":"634123100000064128748720220705091657","imageName":"634123100000064128748720220705091657_00.jpg","upLoadFinish":"4"},{"key":"wxfile://tmp_4217c15f8a01eb1615df81f78d220589.jpg","materielCheckCd":"634123100000065128748720220705091657","imageName":"634123100000065128748720220705091657_00.jpg","upLoadFinish":"4"},{"key":"wxfile://tmp_bb1bf37c3cc89f51af5b930837c512a8.jpg","materielCheckCd":"634123100000065128748720220705091657","imageName":"634123100000065128748720220705091657_01.jpg","upLoadFinish":"4"}]
    if (imgListPath && imgListPath.length > 0) {
      for (let k = 0; k < imgListPath.length; k++) {
        let txnKey = imgListPath[k].txnKey
        let uploadStatus = imgListPath[k].upLoadFinish
        let picRow = imgListPath[k].picRow
        let picCol = imgListPath[k].picCol
        if (visitConfig.visitProcessUploadStatus.uploaded != uploadStatus) {
          let _keyId = imgListPath[k].key
          const postImage = request.uploadNew(_keyId, config.api.uploadMslCompImage, {
            fileTypeCd: "VISIT_MSLCOMP_IMAGE",
            txnKey: txnKey,
            mslCompCd: "",
            picRow: picRow,
            picCol: picCol
          });
          //请求中出现报错  
          postImage.then(result => {
            logger.info('必分销图片上传成功。。', result);
            this.updateVisitProcessStepImgState(visitConfig.visitProcessStep.BFXJC, _keyId, visitConfig.visitProcessUploadStatus.uploaded);
          }).catch((mslI) => {
            logger.error('必分销上传图片失败回调', mslI);

            //这里的log是[10:02:39]  必分销上传图片失败回调 {"errno":600005,"errMsg":"uploadFile:fail file path invalid"}
            this.updateVisitProcessStepImgState(visitConfig.visitProcessStep.BFXJC, _keyId, visitConfig.visitProcessUploadStatus.error);
          });
        }
      }
    }
  },


已经封装好的上传图片代码


const uploadNew = (filePath, url, formData, hasLoading = false) => {
    const token = userContext.getToken()
    console.log('上传文件地址。。。', filePath);
    console.log('上传formData数据。。。', formData);

    return new Promise((resolve, reject) => {

        // 请求是否是白名单标识
        let isWhiteUrl = false;
        for (let i = 0; i < whiteUrl.length; i++) {
            if (url.lastIndexOf(whiteUrl[i]) >= 0) {
                isWhiteUrl = true;
                break;
            }
        }
        console.log('是否白名单', isWhiteUrl);
        //如果token为空则直接跳转至登录页面
        if (!isWhiteUrl && !token) {
            reject({});
            utils.changePage(config.page.login);
            return
        }

        if (hasLoading) {
            wx.showLoading({
                title'加载中...',
                masktrue,
            })
        }

        wx.uploadFile({
            filePath,
            name'file',
            url: url,
            header: {
                'content-type''multipart/form-data',
                Authorization'Bearer ' + token
            },
            formData: formData || {},
            success(request) {
                if (request.statusCode === 200) {
                    const data = JSON.parse(request.data);
          
                    resolve(data);
                } else {
                    console.error(request)
                    reject(request);
                }
            },
            fail(error) {
                console.log('图片上传错误日志',error);
                reject(error);
            },
            complete() => {
                wx.hideLoading();
            },
        });
    });
};



我的微信号 :ly957048226


诚挚邀请技术人员帮助我们一起解决,用户使用小程序每天都在出现不定时 不定人 丢失照片情况 影响很大

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

1 个回答

  • Mr.Zhao
    Mr.Zhao
    2022-08-12

    uploadfile不要设置content-type 容易出问题,碰到过几个了

    2022-08-12
    有用
    回复 4
    • y~
      y~
      2022-08-15
      不设置content-type如果上传图片需要携带其他的数据formdata也可以吗,我这里是还需要携带一些其他的参数上传
      2022-08-15
      回复
    • Mr.Zhao
      Mr.Zhao
      2022-08-15回复y~
      跟携带其它参数没关系   api自动会带上的content-type的
      2022-08-15
      回复
    • y~
      y~
      2022-08-15
      好的好的 我试了一下去掉了 发现没丢数据也没丢图 但是为啥加上这个只能在极少数人手机上出现报错呢 ,这是咋回事啊大神
      2022-08-15
      回复
    • Mr.Zhao
      Mr.Zhao
      2022-08-15回复y~
      不知道  别加就行了
      2022-08-15
      回复
登录 后发表内容