From c0a77f709e371ffb8c1b4c8c1ea24b5519e88f75 Mon Sep 17 00:00:00 2001 From: Tevin <tingquanren@163.com> Date: Fri, 22 Jul 2022 10:05:46 +0800 Subject: [PATCH] 图片管理增加错误收集能力 --- forms/imagePicker/CImagePicker.vue | 53 +++++++++++++++++++------- common/Bridge.js | 37 ++++++++++++++++-- 2 files changed, 72 insertions(+), 18 deletions(-) diff --git a/common/Bridge.js b/common/Bridge.js index 811096f..daa7d07 100644 --- a/common/Bridge.js +++ b/common/Bridge.js @@ -227,8 +227,9 @@ * 保存文件到 java 端,并返回文件名 * @param objUrl * @param callback + * @param onError */ - fileSave(objUrl = '', callback) { + fileSave(objUrl = '', callback, onError) { // 非 ObjectURL 跳过 if (objUrl.indexOf('blob:') < 0) { callback(objUrl); @@ -248,7 +249,17 @@ }; this.invoking('img_write', writeData, res => { if (res.result === false) { - Tools.toast(res.msg); + Tools.toast('离线图片存储:' + res.msg); + onError({ + method: 'img_write', + request: { + fileName: writeData.fileName, + currentIdx: writeData.currentIdx, + totalIdx: writeData.total, + data: '(' + writeData.data.length + '个base64字符...)', + }, + response: res, + }); return; } // 按分段递归保存 @@ -273,8 +284,9 @@ * 从 java 读取文件 base64 * @param bridgeName * @param callback + * @param onError */ - fileLoad(bridgeName = '', callback) { + fileLoad(bridgeName = '', callback, onError) { // 非存储地址,跳过 if (bridgeName.indexOf('bridge:') < 0) { callback(bridgeName); @@ -297,7 +309,17 @@ }; this.invoking('img_read', loadData, res => { if (res.result === false) { - Tools.toast(res.msg); + Tools.toast('离线图片读取:' + res.msg); + onError({ + method: 'img_read', + request: loadData, + response: { + result: res.result, + msg: res.msg, + 'total_size': res.totalSize, + data: '(' + (res.data || '').length + '个base64字符...)', + }, + }); return; } if (totalSize === 0) { @@ -354,6 +376,9 @@ callback && callback([]); return; } + if (typeof names === 'string') { + names = names.split(','); + } // 保存 if (type === 'save') { const list = []; @@ -370,6 +395,8 @@ else { callback && callback(list); } + }, err => { + callback && callback(null, err); }); }; save(0); @@ -390,6 +417,8 @@ else { callback && callback(list); } + }, err => { + callback && callback(null, err); }); }; load(0); diff --git a/forms/imagePicker/CImagePicker.vue b/forms/imagePicker/CImagePicker.vue index 3a9e118..6ebd882 100644 --- a/forms/imagePicker/CImagePicker.vue +++ b/forms/imagePicker/CImagePicker.vue @@ -211,6 +211,9 @@ }, }; +// 图片上传节流 +const _readyUpload = {}; + export const uploadImage = (files, callback) => { if (!files || files.length === 0) { callback('success', []); @@ -229,7 +232,7 @@ file.url.indexOf('wxfile') >= 0 || file.url.indexOf('http://tmp/') >= 0 ) { - let header = {}; + const header = {}; if (process.env.TARO_ENV === 'weapp') { const localCookies = JSON.parse(Taro.getStorageSync('cookies') || '{}'); const cookiesArr = []; @@ -238,13 +241,22 @@ }); header['Cookie'] = cookiesArr.join('; '); } + const requestFile = { + url, + filePath: file.url, + fileName: file.fileName || '', + }; uploadTeam.push( new Promise((resolve, reject) => { + // 如果本次已上传过,直接返回地址 + if (_readyUpload[file.url] && _readyUpload[file.url].length > 5) { + resolve(_readyUpload[file.url]); + return; + } + // 上传 Taro.uploadFile({ - url, + ...requestFile, header, - filePath: file.url, - fileName: file.fileName || '', name: 'file', formData: {}, success(res) { @@ -252,22 +264,35 @@ typeof res.data === 'string' ? JSON.parse(res.data) : res.data; + // 上传成功 if (res2.state.code === 2000) { - resolve( - $fetchCommon.transImgPath( - 'fix', - res2.data.src || res2.data.file || res2.data.url - ) + const imgUrl = $fetchCommon.transImgPath( + 'fix', + res2.data.src || res2.data.file || res2.data.url ); - } else { - reject({ message: res2.state.msg }); + _readyUpload[file.url] = imgUrl; + resolve(imgUrl); + } + // 上传失败 + else { + reject({ + ...requestFile, + response: res2, + message: res2.state.msg, + }); } }, - cancel() { - reject({ message: '上传图片已取消!' }); + cancel(err) { + reject({ + ...requestFile, + message: '上传图片已取消!', + }); }, fail() { - reject({ message: '上传图片失败!' }); + reject({ + ...requestFile, + message: '上传图片失败!', + }); }, }); }) -- Gitblit v1.9.1