1***@qq.com
1***@qq.com
  • 发布:2026-01-21 17:41
  • 更新:2026-01-21 17:44
  • 阅读:18

【报Bug】新版本hbuilder的uni.uploadFile

分类:uni-app

产品分类: uniapp/H5

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: win10

HBuilderX类型: 正式

HBuilderX版本号: 4.87

浏览器平台: Chrome

浏览器版本: 144.0.7559.59

项目创建方式: HBuilderX

操作步骤:

export function uploadFile(file, callback) {
return new Promise((resolve, reject) => {
try {
let uploadTask = uni.uploadFile({
url: ${config.baseUrl}/iot/upload,
header: {
Authorization: "Bearer " + getToken()
},
file: file,
success:function (res) {
console.log('11111111111',res);
if (res.statusCode === 200) {
let data = JSON.parse(res.data)
resolve(data)
} else {
reject(res)
}
},
fail: function(err) {
console.log('2222222222',err);
reject(err)
}
});
// 监听上传进度
uploadTask.onProgressUpdate((res) => {
if (callback) {
callback(res)
}
});
} catch (e) {
// console.log(e);
reject(e)
//TODO handle the exception
}
})
}

预期结果:

触发success回调

实际结果:

触发fail回调

bug描述:

更新到4.87版本hbuilder的api uni.uploadFile,接口200也返回了数据,但是触发的回调却是fail方法

2026-01-21 17:41 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

该问题请在专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

您好,根据现有信息,暂时无法直接判定这是 uni-app 4.87 的框架 bug,但可以先按下面的思路快速自查并补充关键信息,方便官方或社区进一步定位。

一、请先补充 3 个关键信息

  1. 运行平台:App-Android / App-iOS / H5 / 小程序 / 鸿蒙 Next?
  2. HBuilderX 控制台完整日志
    • fail 回调里打印 err.errMsgerr.statusCode
    • success 回调里打印 res.statusCoderes.data(脱敏后贴出)
  3. 服务端返回示例:Content-Type、实际 JSON(脱敏后贴出)
二、最常见的 3 种“200 却进 fail”场景 场景 自查办法 快速规避
1. JSON.parse 抛异常被外层 try/catch 捕获 在 success 回调里加 try{ JSON.parse(res.data) }catch(e){ console.error('parse err',e) } 先 catch 再决定 resolve/reject
2. statusCode 并非 200(如 302/204/304) 打印 res.statusCode 确认 与服务端对齐实际状态码
3. App 平台缺少 Content-LengthTransfer-Encoding 抓包(Charles、Fiddler)看响应头 服务端补全头或改用 chunked

三、最小复现模板(可直接替换您的代码验证)

uni.uploadFile({  
  url: 'https://mock.yourdomain.com/iot/upload',  
  filePath: tempFilePath,  
  name: 'file',  
  header: { Authorization: 'Bearer ' + getToken() },  
  success: (res) => {  
    console.log('statusCode', res.statusCode);  
    console.log('rawData', res.data);  
    try {  
      const data = JSON.parse(res.data);  
      console.log('parse ok', data);  
    } catch (e) {  
      console.error('parse fail', e);  
    }  
  },  
  fail: (err) => {  
    console.error('upload fail', err.errMsg, err.statusCode);  
  }  
});

四、下一步

  1. 按“一”补充信息后,若仍确认是框架问题,请把最小复现仓库(含 mock 接口)提交到 DCloud issues,官方会跟进。
  2. 如只是 JSON.parse 异常,建议在业务层先兼容处理,避免被 Promise 外层 catch 误判为网络错误。

期待您补充日志后继续排查!

内容为 AI 生成,仅供参考
DCloud_UNI_JBB

DCloud_UNI_JBB

要回复问题请先登录注册