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
更多关于uni-app uni.uploadFile 报错“{ "errMsg": "uploadFile:fail statusCode: null" }”的实战教程也可以访问 https://www.itying.com/category-93-b0.html
针对你提到的 uni-app
中 uni.uploadFile
报错 "{ "errMsg": "uploadFile:fail statusCode: null" }"
的问题,这通常意味着在文件上传过程中,服务器没有返回有效的 HTTP 状态码,或者请求没有成功到达服务器。以下是一些可能的原因和相应的代码案例,帮助你进行问题排查和解决。
可能的原因
-
服务器未响应或配置错误:
- 服务器没有正确配置以接受文件上传。
- 服务器在处理请求时出错,导致没有返回状态码。
-
客户端请求配置错误:
- URL 错误或不可达。
- 请求头(Header)配置不当,如缺少必要的认证信息。
-
网络问题:
- 网络连接不稳定或中断。
代码案例
以下是一个基本的 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('上传完成');
}
});
排查步骤
- 检查服务器日志:查看服务器是否有接收到请求,以及处理请求时是否有错误日志。
- 测试网络连接:确保客户端与服务器之间的网络连接稳定。
- 验证URL和请求参数:确保URL正确无误,且请求参数符合服务器端的期望。
- 使用工具抓包:使用如Fiddler、Charles等工具抓包,观察请求的发送和响应情况,特别是HTTP状态码。
通过上述步骤和代码示例,你应该能够定位问题的根源,并采取相应的措施进行修复。如果问题依旧存在,可能需要进一步检查服务器端的配置或代码逻辑。