初始代码如下:
//拍照或选择相册图片
function scanPicture() {
uni.chooseImage({
count: 1,
sourceType: ['album', 'camera'], //album 从相册选择 camera相机选择
success: function(res) {
imageData.value = res.tempFiles[0] //页面显示图片
uploadFile(res.tempFilePaths[0])
}
})
}
// 上传文件
function uploadFile(filePath) {
uni.uploadFile({
//import.meta.env.VITE_PROXY_TARGET为项目接口调用地址
url: import.meta.env.VITE_PROXY_TARGET + '/goods/product_pic',
filePath: filePath,
name: 'file',
fileType: 'image',
header: {
Authorization: 'Bearer ' + getToken()
},
success: (uploadFileRes) => {
const data = JSON.parse(uploadFileRes.data)
imageUrl.value = data.data.path //上传成功后端返回的图片地址
},
fail: (err) => {
uni.showToast({
title: '上传失败',
icon: 'error'
})
}
})
}
当如上编辑代码后,上传图片后一开始在电脑上试了上传都没问题,然后手机上试上传时选图片上传正常,拍照上传时提示没有图片地址,所以一开始就以为是选择相册可以,拍照上传不行,就误以为是什么兼容性的问题,后来测试说她上传也有失败的,并且有的可以有的不行,所以排除了方式问题,我就开始调试图片,发现失败时上传文件的api都没有进入fail回调里,就很奇怪,最后找后端看了下发现是,服务器限制了上传文件大小,是因为图片过大的问题。
好了,现在找到了问题就可以对症下药了,文件过大,那就压缩一下再上传咯
首先百度了,参考了文章uniapp h5拍照上传照片_uniapp拍照上传_peuy的博客-CSD