uni-app uni.chooseImage 通过照相机拍摄上传报错 "uploadFile:fail undefined"

uni-app uni.chooseImage 通过照相机拍摄上传报错 “uploadFile:fail undefined”

开发环境 版本号 项目创建方式
Windows macos 10.14.6 HBuilderX

产品分类:uniapp/App

PC开发环境操作系统:Windows

PC开发环境操作系统版本号:macos 10.14.6

HBuilderX类型:正式

HBuilderX版本号:3.2.2

手机系统:Android

手机系统版本号:Android 11

手机厂商:小米

手机机型:小米8

页面类型:vue

打包方式:云端

项目创建方式:HBuilderX

示例代码:

upimg(){
let _this=this;
uni.chooseImage({
count:1,
sizeType:'compressed',
success: (chooseImageRes) => {
const tempFilePaths = chooseImageRes.tempFilePaths;
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) 
} 
}); 
} 
});       
}, 

通过照相机拍摄的图片上传一直走 fail, 错误信息:{"errMsg":"uploadFile:fail undefined"}

操作步骤:

upimg(){
let _this=this;
uni.chooseImage({
count:1,
sizeType:'compressed',
success: (chooseImageRes) => {
const tempFilePaths = chooseImageRes.tempFilePaths;
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,
sizeType:'compressed',
success: (chooseImageRes) => {
const tempFilePaths = chooseImageRes.tempFilePaths;
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) 
} 
}); 
} 
});       
}, 

实际结果:

无法上传,报错 {"errMsg":"uploadFile:fail undefined"}


更多关于uni-app uni.chooseImage 通过照相机拍摄上传报错 "uploadFile:fail undefined"的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

老哥 解决了嘛?我也遇到了

更多关于uni-app uni.chooseImage 通过照相机拍摄上传报错 "uploadFile:fail undefined"的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这个错误通常与文件路径或网络配置有关。从你的代码来看,主要问题可能出在以下几个方面:

  1. uni.uploadFile参数错误:你同时使用了filePathfile参数,但uni.uploadFile的正确参数是filePathfile参数是无效的。请删除file:tempFilePaths[0]这一行。

  2. 服务器地址问题uploadFile:fail undefined错误通常表示网络请求失败。请检查:

    • 确保this.config+'manage/img/upload'拼接后的URL是正确的
    • 服务器是否支持跨域请求(如果是H5环境)
    • 在Android App中,确保服务器地址使用HTTPS(Android要求安全连接)
  3. 权限问题:在Android App中,需要确保已配置相机和存储权限。在manifest.json中检查:

    "permissions": {
      "Camera": {},
      "WritePhotosAlbum": {}
    }
    
  4. 临时文件路径问题:拍摄的照片路径可能需要特殊处理。建议修改代码如下:

upimg() {
  let _this = this;
  uni.chooseImage({
    count: 1,
    sizeType: 'compressed',
    sourceType: ['camera'], // 明确指定使用相机
    success: (chooseImageRes) => {
      const tempFilePaths = chooseImageRes.tempFilePaths;
      console.log('选择的文件路径:', tempFilePaths[0]);
      
      // 修正uploadFile参数
      uni.uploadFile({
        url: _this.config + 'manage/img/upload',
        filePath: tempFilePaths[0],
        name: 'img',
        formData: {
          // 可以添加其他表单数据
        },
        success: (uploadFileRes) => {
          console.log(uploadFileRes.data);
          let dat = JSON.parse(uploadFileRes.data);
          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);
          uni.showToast({
            title: '上传失败,请检查网络',
            icon: "none"
          });
        }
      });
    },
    fail(err) {
      console.log('选择图片失败:', err);
    }
  });
}
回到顶部