uni-app uni.uploadFile 报错“{ "errMsg": "uploadFile:fail statusCode: null" }”

uni-app uni.uploadFile 报错“{ “errMsg”: “uploadFile:fail statusCode: null” }”

项目信息 详情
产品分类 uniapp/App
PC开发环境操作系统 Mac
PC开发环境操作系统版本号 14.4.1
HBuilderX类型 正式
HBuilderX版本号 4.29
手机系统 全部
手机厂商 华为
页面类型 vue
vue版本 vue3
打包方式 云端
项目创建方式 HBuilderX

测试过的手机:

HarmonyOS NEXT未测试

示例代码:

getUpload(){
    let base64 = this.receiveSign;
    base64ToPath(base64).then(res => {
        //res为图片路径
        console.log(res)
        let imgSrc = res;  

        // 本地地址:http://192.168.1.108:20000  
        // 线上地址: http://api.yzkj8.cn:10000  

        console.log(uni.getStorageSync('token'))  

        // 将文件上传至后台,返回一个fileId  
        uni.uploadFile({  
                    url: config.base_url+'/app/appFile/uploadSign',   
                    filePath: imgSrc,  
                    header: {  
                        'k': uni.getStorageSync('token'),  
                    },  
                    name: 'file',  
                    formData:{},  
                    success: (res) => {  
                        console.log(res);  
                        let fileRes = JSON.parse(res.data);  
                        if(fileRes.success){  
                            this.fileId = fileRes.data; //获取到返回的fileid  
                            console.log( fileRes.data);  
                            // this.changeStatus() // 改变订单状态  
                        }else{  
                             console.log("成功函数");  
                            uni.showToast({  
                                icon:"none",  
                                title:fileRes.msg || "网络不稳定,请重试!"  
                            })  
                        }  
                    },  
                    fail:(res) => {  
                        console.log(res)  
                        // uni.hideLoading()  
                        this.isClick = false; // 提交按钮可点击  
                        uni.showToast({  
                            icon:"none",  
                            title:"网络不稳定,请重试!"  
                        })  
                    }  
                });  
    })  
}

操作步骤:

线上环境均能复现

预期结果:

正常请求,收到后端的返回结果。

实际结果:

上传失败,后端没有请求。

bug描述:

使用 uni.uploadFile 函数上传签名文件至后端,本地环境,上传正常,切换线上地址,报错{ “errMsg”: “uploadFile:fail statusCode: null” },后端未接收到请求。用Postman测试过,接口没问题。最诡异的是,本地环境下,前端连接本地,后端连接线上或本地,都能上传成功,一旦前端切换成线上地址,就报错且后端收不到请求。


更多关于uni-app uni.uploadFile 报错“{ "errMsg": "uploadFile:fail statusCode: null" }”的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app uni.uploadFile 报错“{ "errMsg": "uploadFile:fail statusCode: null" }”的实战教程也可以访问 https://www.itying.com/category-93-b0.html


针对你提到的 uni-appuni.uploadFile 报错 "{ "errMsg": "uploadFile:fail statusCode: null" }" 的问题,这通常意味着在文件上传过程中,服务器没有返回有效的 HTTP 状态码,或者请求没有成功到达服务器。以下是一些可能的原因和相应的代码案例,帮助你进行问题排查和解决。

可能的原因

  1. 服务器未响应或配置错误

    • 服务器没有正确配置以接受文件上传。
    • 服务器在处理请求时出错,导致没有返回状态码。
  2. 客户端请求配置错误

    • URL 错误或不可达。
    • 请求头(Header)配置不当,如缺少必要的认证信息。
  3. 网络问题

    • 网络连接不稳定或中断。

代码案例

以下是一个基本的 uni.uploadFile 使用示例,以及如何在请求中添加必要的配置来捕获更多错误信息:

uni.uploadFile({
    url: 'https://your-server-url.com/upload', // 确保URL正确
    filePath: tempFilePaths[0], // 文件路径,tempFilePaths是chooseImage返回的选定文件的本地路径列表
    name: 'file', // 文件对应的key,开发者在服务器端用这个key可以获取到文件
    formData: {
        'user': 'test'
    },
    success: (uploadFileRes) => {
        console.log('上传成功:', uploadFileRes.data);
    },
    fail: (error) => {
        console.error('上传失败:', error);
        // 尝试获取更多错误信息
        if (error.errMsg === 'uploadFile:fail statusCode: null') {
            uni.showToast({
                title: '服务器未返回状态码,请检查服务器配置或网络状况',
                icon: 'none'
            });
        }
    },
    complete: () => {
        console.log('上传完成');
    }
});

排查步骤

  1. 检查服务器日志:查看服务器是否有接收到请求,以及处理请求时是否有错误日志。
  2. 测试网络连接:确保客户端与服务器之间的网络连接稳定。
  3. 验证URL和请求参数:确保URL正确无误,且请求参数符合服务器端的期望。
  4. 使用工具抓包:使用如Fiddler、Charles等工具抓包,观察请求的发送和响应情况,特别是HTTP状态码。

通过上述步骤和代码示例,你应该能够定位问题的根源,并采取相应的措施进行修复。如果问题依旧存在,可能需要进一步检查服务器端的配置或代码逻辑。

回到顶部