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

2 回复

以上原因都不是的话 可能就是 服务器配置限制了 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" 和描述(选择相册图片正常,手机拍摄的不行),这通常与文件路径或权限问题有关。以下是几个关键排查点:

  1. 文件路径问题:在 uni.uploadFile 的参数中,你同时使用了 filePathfile 字段,但官方文档仅支持 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) }
    });
    
  2. 临时文件权限:拍摄的照片可能保存在临时目录,某些系统(如Android 11)对临时文件访问有权限限制。确保在 manifest.json 中配置了正确的文件权限(如 android.permission.READ_EXTERNAL_STORAGE)。

  3. 路径格式检查:拍摄的照片路径可能包含特殊字符或格式问题。在 console.log(tempFilePaths[0]) 后,检查路径是否以 file:// 开头,并尝试用 encodeURI() 处理路径:

    filePath: encodeURI(tempFilePaths[0])
    
  4. HBuilderX版本兼容性:从旧版本升级到3.2.2+后,底层文件处理逻辑可能有变化。尝试更新到最新稳定版HBuilderX,或检查项目基础库版本是否需调整。

  5. 网络请求配置:确保 url 地址可访问(如HTTPS协议),且服务器支持接收拍摄的文件格式(如HEIC格式需转换)。可在 fail 回调中打印完整错误详情:

    fail: (err) => { console.log('上传失败详情:', err) }
回到顶部