宸理
宸理
  • 发布:2025-12-09 20:47
  • 更新:2025-12-10 09:58
  • 阅读:30

【报Bug】新版本HBuilder X打包后,uni.uploadFile执行异常(旧版本打包出来的正常使用)

分类:uni-app

产品分类: uniapp/H5

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Windows 11 专业版 23H2

HBuilderX类型: 正式

HBuilderX版本号: 4.85

浏览器平台: Chrome

浏览器版本: 137.0.7151.122

项目创建方式: HBuilderX

示例代码:
    uni.uploadFile({  
        url: url,  
        name: 'file',  
        file: options.file,  
        header: header,  
        formData,  
        success: (res) => {  
            console.log(res, '上传图片成功数据');  
            const response = JSON.parse(res.data);  
            if ([402, 401].includes(response.code)) {  
                handleRequest(response, options).then((res) => {  
                    resolve(res);  
                });  
            } else {  
                resolve(response);  
            }  
        },  
        fail: (err) => {  
            console.log(err, '上传图片失败数据');  
            reject(err);  
        }  
    });

操作步骤:

使用最新的HBuilderX(4.84/4.85)打包,去上传图片

预期结果:

可以正常上传图片

实际结果:

图片已经上传成功了,但是进入了fail逻辑,不能正常上传图片

bug描述:

uni.uploadFile方法在HBuilder X 4.60版本打包出来正常使用,使用最新的4.84以及4.85版本打包出来的包异常,一直进入的是fail,实际上接口已经上传成功,并返回了链接

2025-12-09 20:47 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

该bug反馈内容不完整,关键缺失目标平台信息(App/iOS/Android/Web/小程序类型)及fail回调中err的具体错误码和消息,难以精准复现。代码示例缺少服务器响应格式、header细节和错误处理逻辑,无法直接验证问题。

根据知识库,云打包机版本匹配规则可能导致行为差异:HBuilderX 4.85可能匹配到不同云端打包版本(如4.86),而4.60版本行为正常说明存在版本兼容性问题。uni.uploadFile在各平台兼容性表显示需注意响应解析逻辑变化,新版本可能更严格校验HTTP状态码或响应体格式。

实际结果中"接口已上传成功但触发fail"表明客户端对成功响应的判定条件变更,可能因:

  1. 服务器返回非2xx状态码(如304重定向)被新版本视为失败
  2. 响应体JSON格式异常(如包含BOM头、非法字符)
  3. 网络请求库底层实现变更

建议用户补充:

  • 具体目标平台(App需区分iOS/Android/鸿蒙)
  • fail回调中err.errMsg和err.statusCode
  • 服务器响应原始数据(headers+body)
  • 尝试添加complete回调查看完整执行流程

参考云打包版本匹配规则,可尝试降级HBuilderX至4.80或升级至最新正式版验证。若为App平台,需检查manifest.json中权限配置是否完整。

内容为 AI 生成,仅供参考
宸理

宸理 (作者)

目标平台:web(在安卓和iOS真机均可复现)

fail回调errror信息:{"errMsg": "uploadFile:fail file error"} 错误信息

服务器响应原始数据:
hearders

access-control-allow-headers  
x-requested-with,x-www-form-urlencoded,Authorization,token, content-type  
access-control-allow-methods  
POST, GET, OPTIONS, DELETE  
access-control-allow-origin  
*  
access-control-max-age  
3600  
connection  
keep-alive  
content-length  
145  
content-type  
application/json;charset=UTF-8  
date  
Wed, 10 Dec 2025 00:37:43 GMT  
server  
nginx/1.13.1  
set-cookie  
JSESSIONID=7C6E388A08720D9B18073245A93167D7; Path=/; HttpOnly

body
{
"success": true,
"data": "https://lbbtech.oss-cn-shenzhen.aliyuncs.com/globalSettings/picture/5398703220251210083743090.png",
"error": "",
"code": "0"
}

DCloud_UNI_JBB

DCloud_UNI_JBB

检查一下 API 的入参,filePath 和 files 是不是都没有传,这两个参数不能同时为空

  • 宸理 (作者)

    是都没有传,只传了file,是新的版本要求吗,之前代码都运行的好好,只有更新完HBUilderX之后才异常了(同事旧版本打包出来是正常,我更新了最新的HBUilderX就异常了)

    2025-12-10 14:56

  • DCloud_UNI_JBB

    回复 宸理: 修了一个bug,之前能运行是bug导致的,新版本修复了bug

    2025-12-10 14:58

要回复问题请先登录注册