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
老哥 解决了嘛?我也遇到了
更多关于uni-app uni.chooseImage 通过照相机拍摄上传报错 "uploadFile:fail undefined"的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这个错误通常与文件路径或网络配置有关。从你的代码来看,主要问题可能出在以下几个方面:
-
uni.uploadFile参数错误:你同时使用了filePath和file参数,但uni.uploadFile的正确参数是filePath,file参数是无效的。请删除file:tempFilePaths[0]这一行。 -
服务器地址问题:
uploadFile:fail undefined错误通常表示网络请求失败。请检查:- 确保
this.config+'manage/img/upload'拼接后的URL是正确的 - 服务器是否支持跨域请求(如果是H5环境)
- 在Android App中,确保服务器地址使用HTTPS(Android要求安全连接)
- 确保
-
权限问题:在Android App中,需要确保已配置相机和存储权限。在manifest.json中检查:
"permissions": { "Camera": {}, "WritePhotosAlbum": {} } -
临时文件路径问题:拍摄的照片路径可能需要特殊处理。建议修改代码如下:
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);
}
});
}

