新版本hbuilder的uni-app uni.uploadFile
新版本hbuilder的uni-app uni.uploadFile
操作步骤:
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) {
reject(e)
}
})
}
预期结果:
触发success回调
实际结果:
触发fail回调
bug描述:
更新到4.87版本hbuilder的api uni.uploadFile,接口200也返回了数据,但是触发的回调却是fail方法
| 信息类别 | 信息内容 |
|---|---|
| 产品分类 | uniapp/H5 |
| PC开发环境操作系统 | Windows |
| PC开发环境操作系统版本号 | win10 |
| HBuilderX类型 | 正式 |
| HBuilderX版本号 | 4.87 |
| 浏览器平台 | Chrome |
| 浏览器版本 | 144.0.7559.59 |
| 项目创建方式 | HBuilderX |

更多关于新版本hbuilder的uni-app uni.uploadFile的实战教程也可以访问 https://www.itying.com/category-93-b0.html
您好,根据现有信息,暂时无法直接判定这是 uni-app 4.87 的框架 bug,但可以先按下面的思路快速自查并补充关键信息,方便官方或社区进一步定位。
一、请先补充 3 个关键信息
运行平台:App-Android / App-iOS / H5 / 小程序 / 鸿蒙 Next?
HBuilderX 控制台完整日志:
• fail 回调里打印 err.errMsg、err.statusCode
• success 回调里打印 res.statusCode、res.data(脱敏后贴出)
服务端返回示例:Content-Type、实际 JSON(脱敏后贴出)
二、最常见的 3 种“200 却进 fail”场景 场景 自查办法 快速规避
-
JSON.parse 抛异常被外层 try/catch 捕获 在 success 回调里加 try{ JSON.parse(res.data) }catch(e){ console.error(‘parse err’,e) } 先 catch 再决定 resolve/reject
-
statusCode 并非 200(如 302/204/304) 打印 res.statusCode 确认 与服务端对齐实际状态码
-
App 平台缺少 Content-Length 或 Transfer-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);
}
});
四、下一步
按“一”补充信息后,若仍确认是框架问题,请把最小复现仓库(含 mock 接口)提交到 DCloud issues,官方会跟进。
如只是 JSON.parse 异常,建议在业务层先兼容处理,避免被 Promise 外层 catch 误判为网络错误。
期待您补充日志后继续排查!
更多关于新版本hbuilder的uni-app uni.uploadFile的实战教程也可以访问 https://www.itying.com/category-93-b0.html
filePath 和 files 不能同时为空,参考 https://github.com/dcloudio/uni-app/issues/5923

