diff --git a/src/pages/back/backNum.vue b/src/pages/back/backNum.vue index 2e4cdcf..3fb1d79 100644 --- a/src/pages/back/backNum.vue +++ b/src/pages/back/backNum.vue @@ -322,48 +322,169 @@ const submitNum = async () => { }) } //上传 +// 上传图片 - 使用方法二的方式 const uploadImg = (item) => { + // 检查是否在 Cordova 环境中 + if (window.cordova) { + // Cordova 环境 - 使用方法二的方式 + navigator.camera.getPicture( + (file) => { + onCameraSuccess(file, item) + }, + (message) => { + console.log('选择图片失败', message) + uni.showToast({ title: '选择图片失败', icon: 'none' }) + }, + { + quality: 50, + destinationType: window.Camera.DestinationType.DATA_URL, + sourceType: window.Camera.PictureSourceType.SAVEDPHOTOALBUM, + } + ) + } else { + // 非 Cordova 环境 - 保持原来的 uni.chooseImage 方式作为降级方案 uni.chooseImage({ - count: 1, //图片可选择数量 - sizeType: ['original', 'compressed'], //original 原图,compressed 压缩图,默认二者都有 - sourceType: ['album', 'camera',], //album 从相册选图,camera 使用相机,默认二者都有。 - success: res => { - console.log(res) - let imgFiles = res.tempFilePaths //图片的本地文件路径列表 - // imgBeseUrl.value = imgFiles[0] - // console.log('本地地址', imgFiles) - // console.log('请求地址', baseURL+"/file/upload") - uni.uploadFile({ - // url: baseURL+"/file/upload",//app - url: "/file/upload",//h5 - filePath: imgFiles[0], - name: 'file', - success: (res) => { - res = JSON.parse(res.data) - console.log('上传成功', res.code); - console.log('上传成功', res.data); - if(res.code&&res.code==200){ - let obj = { - name:res.data.name, - url:res.data.url - } - if (!item.bmFileInfos) item.bmFileInfos = [] - item.bmFileInfos.push(obj) - // item.bmFileInfos.value = [obj] - uni.showToast({ title: '上传成功', icon: 'none' }) - }else{ - // item.bmFileInfos.value = [] - uni.showToast({ title: '上传失败', icon: 'none' }) - } - }, - fail: (err) => { - console.error('上传失败', err); - } - }); - // this.$refs.vForm.clearValidate() - } - }) + count: 1, + sizeType: ['original', 'compressed'], + sourceType: ['album', 'camera'], + success: res => { + let imgFiles = res.tempFilePaths + // 这里可以保持原来的 uni.uploadFile 方式,或者也改为 base64 方式 + uploadFileTraditional(imgFiles[0], item) + } + }) + } } + +// 相机成功回调 +const onCameraSuccess = (file, item) => { + uploadSignUrl(file, item) +} + +// 使用 base64 方式上传 +const uploadSignUrl = (base64Data, item) => { + // 生成随机文件名 + const fileName = `${generateRandomString(10)}_${Date.now()}.png` + + uni.request({ + // url: baseURL + "/file/uploadBase64", // app + url: "/file/uploadBase64", // h5 + method: 'POST', + data: { + base64File: base64Data, + fileName: fileName, + fileType: 'image/png' + }, + success: (uploadRes) => { + // 处理响应数据 + let responseData = uploadRes.data + if (typeof responseData === 'string') { + responseData = JSON.parse(responseData) + } + + console.log('上传成功', responseData.code) + console.log('上传成功', responseData.data) + + if (responseData.code && responseData.code == 200) { + let obj = { + name: responseData.data.name, + url: responseData.data.url + } + + if (!item.bmFileInfos) item.bmFileInfos = [] + item.bmFileInfos.push(obj) + uni.showToast({ title: '上传成功', icon: 'none' }) + } else { + uni.showToast({ title: '上传失败', icon: 'none' }) + } + }, + fail: (err) => { + console.error('上传失败', err) + uni.showToast({ title: '上传失败', icon: 'none' }) + } + }) +} + +// 传统的文件上传方式(作为降级方案) +const uploadFileTraditional = (filePath, item) => { + uni.uploadFile({ + // url: baseURL+"/file/upload", // app + url: "/file/upload", // h5 + filePath: filePath, + name: 'file', + success: (res) => { + res = JSON.parse(res.data) + console.log('上传成功', res.code) + console.log('上传成功', res.data) + if(res.code && res.code == 200){ + let obj = { + name: res.data.name, + url: res.data.url + } + if (!item.bmFileInfos) item.bmFileInfos = [] + item.bmFileInfos.push(obj) + uni.showToast({ title: '上传成功', icon: 'none' }) + } else { + uni.showToast({ title: '上传失败', icon: 'none' }) + } + }, + fail: (err) => { + console.error('上传失败', err) + } + }) +} + +const generateRandomString = (length) => { + let result = ''; + const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; + const charactersLength = characters.length; + for (let i = 0; i < length; i++) { + result += characters.charAt(Math.floor(Math.random() * charactersLength)); + } + return result; +} +// const uploadImg = (item) => { +// uni.chooseImage({ +// count: 1, //图片可选择数量 +// sizeType: ['original', 'compressed'], //original 原图,compressed 压缩图,默认二者都有 +// sourceType: ['album', 'camera',], //album 从相册选图,camera 使用相机,默认二者都有。 +// success: res => { +// console.log(res) +// let imgFiles = res.tempFilePaths //图片的本地文件路径列表 +// // imgBeseUrl.value = imgFiles[0] +// // console.log('本地地址', imgFiles) +// // console.log('请求地址', baseURL+"/file/upload") +// uni.uploadFile({ +// // url: baseURL+"/file/upload",//app +// url: "/file/upload",//h5 +// filePath: imgFiles[0], +// name: 'file', +// success: (res) => { +// res = JSON.parse(res.data) +// console.log('上传成功', res.code); +// console.log('上传成功', res.data); +// if(res.code&&res.code==200){ +// let obj = { +// name:res.data.name, +// url:res.data.url +// } +// if (!item.bmFileInfos) item.bmFileInfos = [] +// item.bmFileInfos.push(obj) +// // item.bmFileInfos.value = [obj] +// uni.showToast({ title: '上传成功', icon: 'none' }) +// }else{ +// // item.bmFileInfos.value = [] +// uni.showToast({ title: '上传失败', icon: 'none' }) +// } +// }, +// fail: (err) => { +// console.error('上传失败', err); +// } +// }); +// // this.$refs.vForm.clearValidate() +// } +// }) +// } const viewImgs = (item) => { if (!item.bmFileInfos || item.bmFileInfos.length === 0) { uni.showToast({ title: '暂无附件', icon: 'none' })