uni-app uni.uploadFile报错 "uploadFile:fail undefined"
uni-app uni.uploadFile报错 “uploadFile:fail undefined”
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Mac | macOS 10.14.6 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Mac
PC开发环境操作系统版本号:macos 10.14.6
HBuilderX类型:正式
HBuilderX版本号:3.2.3
手机系统:Android
手机系统版本号:Android 11
手机厂商:小米
手机机型:小米8
页面类型:vue
打包方式:云端
项目创建方式:HBuilderX
示例代码:
upimg(){
let _this=this;
uni.chooseImage({
count:1,
success: (chooseImageRes) => {
const tempFilePaths = chooseImageRes.tempFilePaths;
console.log(tempFilePaths[0]);
console.log(this.config+'manage/img/upload');
uni.uploadFile({
url: this.config+'manage/img/upload', //仅为示例,非真实的接口地址
filePath: tempFilePaths[0],
file:tempFilePaths[0],
name: 'img',
formData: {
img:tempFilePaths[0],
},
success: (uploadFileRes) => {
console.log(uploadFileRes.data);
let dat=JSON.parse(uploadFileRes.data)
console.log(dat)
if(dat.code==1){
_this.data.images.push(dat.data.url)
}
else{
uni.showToast({
title: dat.data.msg,
icon:"none",
duration: 1000
});
}
},
fail(err) {
console.log(err)
}
});
}
});
}
操作步骤:
upimg(){
let _this=this;
uni.chooseImage({
count:1,
success: (chooseImageRes) => {
const tempFilePaths = chooseImageRes.tempFilePaths;
console.log(tempFilePaths[0]);
console.log(this.config+'manage/img/upload');
uni.uploadFile({
url: this.config+'manage/img/upload', //仅为示例,非真实的接口地址
filePath: tempFilePaths[0],
file:tempFilePaths[0],
name: 'img',
formData: {
img:tempFilePaths[0],
},
success: (uploadFileRes) => {
console.log(uploadFileRes.data);
let dat=JSON.parse(uploadFileRes.data)
console.log(dat)
if(dat.code==1){
_this.data.images.push(dat.data.url)
}
else{
uni.showToast({
title: dat.data.msg,
icon:"none",
duration: 1000
});
}
},
fail(err) {
console.log(err)
}
});
}
});
}
预期结果:
上传图片成功
实际结果:
上传失败
bug描述:
uni.uploadFile。上传提示 “errMsg”: “uploadFile:fail undefined”
是在升级到3.2.2 版本出现的,之前是比较老的版本,状态项目隔啦一年多要改的需求。改完发现 上传者一块出问题啦。
选择相册里的图片上传是正常的,手机拍摄的不行。
更多关于uni-app uni.uploadFile报错 "uploadFile:fail undefined"的实战教程也可以访问 https://www.itying.com/category-93-b0.html
以上原因都不是的话 可能就是 服务器配置限制了 2M 或其他 上传大小
我找到了还有个原因,也可能文件太大,也会报这个错误
(手机为小米)
具体的原因如下
1、服务器配置限制了2M的文件大小,
2、从相册中选择照片的时候,文件已经优化了只有一两兆,但是从摄像头临时拍摄的相片是在5M左右,这个可以从打印的具体文件路径去找
解决办法就是上传之前压缩文件
参考https://www.cnblogs.com/Lucyy/p/12787381.html
更多关于uni-app uni.uploadFile报错 "uploadFile:fail undefined"的实战教程也可以访问 https://www.itying.com/category-93-b0.html
根据你提供的错误信息 "uploadFile:fail undefined" 和描述(选择相册图片正常,手机拍摄的不行),这通常与文件路径或权限问题有关。以下是几个关键排查点:
-
文件路径问题:在
uni.uploadFile的参数中,你同时使用了filePath和file字段,但官方文档仅支持filePath。请删除file字段,修正为:uni.uploadFile({ url: this.config + 'manage/img/upload', filePath: tempFilePaths[0], // 仅保留此字段 name: 'img', formData: { img: tempFilePaths[0] }, success: (uploadFileRes) => { /* ... */ }, fail: (err) => { console.log(err) } }); -
临时文件权限:拍摄的照片可能保存在临时目录,某些系统(如Android 11)对临时文件访问有权限限制。确保在
manifest.json中配置了正确的文件权限(如android.permission.READ_EXTERNAL_STORAGE)。 -
路径格式检查:拍摄的照片路径可能包含特殊字符或格式问题。在
console.log(tempFilePaths[0])后,检查路径是否以file://开头,并尝试用encodeURI()处理路径:filePath: encodeURI(tempFilePaths[0]) -
HBuilderX版本兼容性:从旧版本升级到3.2.2+后,底层文件处理逻辑可能有变化。尝试更新到最新稳定版HBuilderX,或检查项目基础库版本是否需调整。
-
网络请求配置:确保
url地址可访问(如HTTPS协议),且服务器支持接收拍摄的文件格式(如HEIC格式需转换)。可在fail回调中打印完整错误详情:fail: (err) => { console.log('上传失败详情:', err) }

