import store from '../store'; import { getUpimgKey } from '@/api/login.js'; import { randomString } from '../utils/rocessor.js'; import w_md5 from "../libs/zww-md5/w_md5.js" let service = { baseURL: store.state.baseURL, // 请求头 header: { 'Content-Type': "application/x-www-form-urlencoded" }, // 请求拦截器 interceptors: { // 安装请求前拦截 request: function(success, iserror) { service.request.success = success; service.request.error = iserror; }, // 安装请求完成后拦截 response: function(success, iserror) { service.response.success = success; service.response.error = iserror; } }, // 请求前拦截 request: { // 回调成功执行方法 success: function(e) { return e }, // 回调失败 error: function(e) { return e } }, // 请求完成后拦截 response: { // 回调成功执行方法 success: function(e) { return e }, // 回调失败 error: function(e) { return e } }, // 开始请求 open: async function(data) { return await new Promise(function(resolve, reject) { let requestData = ''; //保存处理完成后请求数据 let url = '' //保存链接地址 console.log('23223') //console.log(data); // 请求前数据处理 requestData = service.request.success(data); if(!requestData){ service.request.error("请先登录"); return } // #ifdef H5 if (process.env.NODE_ENV === 'development') { // console.log(requestData,'service.baseURL') //url = requestData.url; url = service.baseURL + requestData.url; console.log('开发环境') } else { url = service.baseURL + requestData.url; console.log('生产环境') } // #endif // #ifndef H5 url = service.baseURL + requestData.url; // #endif console.log('2333') // console.log(url, '请求地址信息1111'); // 数据复制用于请求 uni.request({ url: url, method: requestData.method || 'GET', data: requestData.data, header: data.header || service.header, success: res => { console.log(res,'res') if (res.statusCode == 200) { try { resolve(service.response.success(res)); } catch (e) { service.response.error(e) } } }, // 请求失败数据处理 fail: (err) => { console.log(err, 'err') service.response.error(err) } }); }) }, // 上传文件 upFilse: async function(...data) { // #ifdef APP // console.log('手机') const upImage = uni.getStorageSync("upImage") || false; uni.getSystemInfoSync().platform if (upImage || store.isShowIllegality || uni.getSystemInfoSync().platform == 'ios') { service.fileStart(...data) } else { uni.showModal({ title: 'App请求访问相机及相册权限', content: '是否允许访问相机相册用于图片上传?', cancelText: '拒绝', confirmText: '允许', success: res => { if (res.confirm) { uni.setStorageSync("upImage", true) service.fileStart(...data) } }, }); } // #endif // #ifndef APP service.fileStart(...data) // #endif }, async fileStart(data, successCallback, errorCallback, sizeCallback, Progress) { // console.log('进入'); let requestData = ''; //保存处理完成后请求数据 let url = '' //保存请求地址 try { // 请求前数据处理 requestData = service.request.success(data); } catch (e) { // 请求报错拦截 service.request.error(e); } // #ifdef H5 if (process.env.NODE_ENV === 'development') { url = requestData.url; // url = service.baseURL + requestData.url; console.log('开发环境') } else { url = service.baseURL + requestData.url; console.log('生产环境') } // #endif // #ifndef H5 url = service.baseURL + requestData.url; // #endif let config = { // 上传图片的API upload_img_url: url, data: requestData.data, file_name: requestData.data.file_name || 'user/' + store.state.user.userInfo.uid } uni.showLoading({ title: '请求key中', mark: true, }) try { console.log('延迟1'); const { data } = await getUpimgKey({ file_name: config.file_name }) uni.hideLoading() setTimeout(() => { // console.log('延迟'); uni.chooseImage({ count: 1, sizeType: ['compressed'], sourceType: ['camera', 'album'], success(res) { //启动上传等待中... let objImg = res.tempFilePaths; objImg.forEach(item => { console.log(item, 'item'); uni.getImageInfo({ src: item, success(ress) { // console.log(ress, 'ress', res.tempFiles[0]); Progress && Progress({ progress: 0 }); try { if (res.tempFiles[0].size <= 2097152) { // console.log('静茹22'); uploadImg(data, res) return } // console.log('静茹23'); // uploadImg(canvasPath.tempFilePath) let canvasWidth, canvasHeight, xs, maxWidth = 750 xs = ress.width / ress.height // 宽高比例 if (ress.width > maxWidth) { canvasWidth = maxWidth // 这里是最大限制宽度 canvasHeight = maxWidth / xs } else { canvasWidth = ress.width canvasHeight = ress.height } sizeCallback && sizeCallback({ w: canvasWidth, h: canvasHeight }) let canvas = uni.createCanvasContext( 'canvas'); canvas.width = canvasWidth canvas.height = canvasHeight canvas.clearRect(0, 0, canvasWidth, canvasHeight); canvas.drawImage(ress.path, 0, 0, canvasWidth, canvasHeight) canvas.save(); // 这里的画布drawImage是一种异步属性 可能存在未绘制全就执行了draw的问题 so添加延迟 setTimeout(e => { // console.log('上传图片'); canvas.draw(true, () => { uni.canvasToTempFilePath({ canvasId: 'canvas', fileType: 'JPEG', destWidth: canvasWidth, destHeight: canvasHeight, quality: 0.7, success: function( canvasPath ) { let faileData = { tempFiles: [{ name: res .tempFiles[ 0 ] .name || '' }], tempFilePaths: [ canvasPath .tempFilePath ] }; uploadImg (data, faileData ); }, fail( err ) { console .log( err, 'err' ); } }) }); }, 200) } catch (e) { console.log(e, '错误'); //TODO handle the exception } } }) }) function uploadImg(data, res) { try { let { AUTH_TOKEN, Timestamp } = store.state.md5; let NONCE = randomString(12); let URL = store.state.baseURL + config.url; let MD5 = w_md5.hex_md5_32(Timestamp + NONCE + AUTH_TOKEN + URL); let tokenMD5 = `${Timestamp}|${NONCE}|${MD5}`; const time = (new Date()).getTime(); // #ifdef H5 const formData = { "policy": data.sign.policy, "OSSAccessKeyId": data.sign.accessid, 'success_action_status': 200, "signature": data.sign.signature, "key": config.file_name + '/' + time + res.tempFiles[0] .name } // #endif // #ifndef H5 const formData = { "policy": data.sign.policy, "OSSAccessKeyId": data.sign.accessid, 'success_action_status': 200, "signature": data.sign.signature, "key": config.file_name + '/' + time + '.png' } // #endif // console.log(formData,'formData'); const upFileObj = uni.uploadFile({ url: data.sign.host, //仅为示例,非真实的接口地址 filePath: res.tempFilePaths[0], formData, name: 'file', header: { "Authori-zation": 'Bearer ' + uni .getStorageSync('token'), "X-YD-Req-Token": tokenMD5, "Access-Control-Max-Age":-1 }, success: (suc) => { if (suc.statusCode == 200) { // #ifdef H5 const imgurl = [{ url: data.sign.host + '/' + config.file_name + '/' + time + res.tempFiles[0] .name }]; // #endif // #ifndef H5 const imgurl = [{ url: data.sign.host + '/' + config.file_name + '/' + time + '.png' }]; // #endif successCallback(imgurl) } uni.hideLoading() }, file(res) { uni.hideLoading() // console.log(res, '图片上传错误'); errorCallback(res) } }); upFileObj.onProgressUpdate((re) => { Progress && Progress(re) console.log(re); }) } catch (e) { uni.showModal({ title: '错误', content: e.message, showCancel: false }); } } }, fail(err) { if (err.errCode == 0) { uni.showToast({ title: '已取消', icon: "error" }); } else if (err.errCode == 12) { uni.showToast({ title: '已返回', icon: "error" }); } else { console.log(err, '图片上传错误'); uni.showToast({ title: '请重新上传', icon: "error" }); } uni.hideLoading() // reject(err) } }) }, 100) } catch (e) { console.log('错误', 555); uni.hideLoading() uni.showToast({ title: e.message, icon: "error" }); reject(res) } } }; export default service