newRequest.js 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393
  1. import store from '../store';
  2. import {
  3. getUpimgKey
  4. } from '@/api/login.js';
  5. import {
  6. randomString
  7. } from '../utils/rocessor.js';
  8. import w_md5 from "../libs/zww-md5/w_md5.js"
  9. let service = {
  10. baseURL: store.state.baseURL, // 请求头
  11. header: {
  12. 'Content-Type': "application/x-www-form-urlencoded"
  13. },
  14. // 请求拦截器
  15. interceptors: {
  16. // 安装请求前拦截
  17. request: function(success, iserror) {
  18. service.request.success = success;
  19. service.request.error = iserror;
  20. },
  21. // 安装请求完成后拦截
  22. response: function(success, iserror) {
  23. service.response.success = success;
  24. service.response.error = iserror;
  25. }
  26. },
  27. // 请求前拦截
  28. request: {
  29. // 回调成功执行方法
  30. success: function(e) {
  31. return e
  32. },
  33. // 回调失败
  34. error: function(e) {
  35. return e
  36. }
  37. },
  38. // 请求完成后拦截
  39. response: {
  40. // 回调成功执行方法
  41. success: function(e) {
  42. return e
  43. },
  44. // 回调失败
  45. error: function(e) {
  46. return e
  47. }
  48. },
  49. // 开始请求
  50. open: async function(data) {
  51. return await new Promise(function(resolve, reject) {
  52. let requestData = ''; //保存处理完成后请求数据
  53. let url = '' //保存链接地址
  54. console.log('23223')
  55. //console.log(data);
  56. // 请求前数据处理
  57. requestData = service.request.success(data);
  58. if(!requestData){
  59. service.request.error("请先登录");
  60. return
  61. }
  62. // #ifdef H5
  63. if (process.env.NODE_ENV === 'development') {
  64. // console.log(requestData,'service.baseURL')
  65. //url = requestData.url;
  66. url = service.baseURL + requestData.url;
  67. console.log('开发环境')
  68. } else {
  69. url = service.baseURL + requestData.url;
  70. console.log('生产环境')
  71. }
  72. // #endif
  73. // #ifndef H5
  74. url = service.baseURL + requestData.url;
  75. // #endif
  76. console.log('2333')
  77. // console.log(url, '请求地址信息1111');
  78. // 数据复制用于请求
  79. uni.request({
  80. url: url,
  81. method: requestData.method || 'GET',
  82. data: requestData.data,
  83. header: data.header || service.header,
  84. success: res => {
  85. console.log(res,'res')
  86. if (res.statusCode == 200) {
  87. try {
  88. resolve(service.response.success(res));
  89. } catch (e) {
  90. service.response.error(e)
  91. }
  92. }
  93. },
  94. // 请求失败数据处理
  95. fail: (err) => {
  96. console.log(err, 'err')
  97. service.response.error(err)
  98. }
  99. });
  100. })
  101. },
  102. // 上传文件
  103. upFilse: async function(...data) {
  104. // #ifdef APP
  105. // console.log('手机')
  106. const upImage = uni.getStorageSync("upImage") || false;
  107. uni.getSystemInfoSync().platform
  108. if (upImage || store.isShowIllegality || uni.getSystemInfoSync().platform == 'ios') {
  109. service.fileStart(...data)
  110. } else {
  111. uni.showModal({
  112. title: 'App请求访问相机及相册权限',
  113. content: '是否允许访问相机相册用于图片上传?',
  114. cancelText: '拒绝',
  115. confirmText: '允许',
  116. success: res => {
  117. if (res.confirm) {
  118. uni.setStorageSync("upImage", true)
  119. service.fileStart(...data)
  120. }
  121. },
  122. });
  123. }
  124. // #endif
  125. // #ifndef APP
  126. service.fileStart(...data)
  127. // #endif
  128. },
  129. async fileStart(data, successCallback, errorCallback, sizeCallback, Progress) {
  130. // console.log('进入');
  131. let requestData = ''; //保存处理完成后请求数据
  132. let url = '' //保存请求地址
  133. try {
  134. // 请求前数据处理
  135. requestData = service.request.success(data);
  136. } catch (e) {
  137. // 请求报错拦截
  138. service.request.error(e);
  139. }
  140. // #ifdef H5
  141. if (process.env.NODE_ENV === 'development') {
  142. url = requestData.url;
  143. // url = service.baseURL + requestData.url;
  144. console.log('开发环境')
  145. } else {
  146. url = service.baseURL + requestData.url;
  147. console.log('生产环境')
  148. }
  149. // #endif
  150. // #ifndef H5
  151. url = service.baseURL + requestData.url;
  152. // #endif
  153. let config = {
  154. // 上传图片的API
  155. upload_img_url: url,
  156. data: requestData.data,
  157. file_name: requestData.data.file_name || 'user/' + store.state.user.userInfo.uid
  158. }
  159. uni.showLoading({
  160. title: '请求key中',
  161. mark: true,
  162. })
  163. try {
  164. console.log('延迟1');
  165. const {
  166. data
  167. } = await getUpimgKey({
  168. file_name: config.file_name
  169. })
  170. uni.hideLoading()
  171. setTimeout(() => {
  172. // console.log('延迟');
  173. uni.chooseImage({
  174. count: 1,
  175. sizeType: ['compressed'],
  176. sourceType: ['camera', 'album'],
  177. success(res) {
  178. //启动上传等待中...
  179. let objImg = res.tempFilePaths;
  180. objImg.forEach(item => {
  181. console.log(item, 'item');
  182. uni.getImageInfo({
  183. src: item,
  184. success(ress) {
  185. // console.log(ress, 'ress', res.tempFiles[0]);
  186. Progress && Progress({
  187. progress: 0
  188. });
  189. try {
  190. if (res.tempFiles[0].size <= 2097152) {
  191. // console.log('静茹22');
  192. uploadImg(data, res)
  193. return
  194. }
  195. // console.log('静茹23');
  196. // uploadImg(canvasPath.tempFilePath)
  197. let canvasWidth, canvasHeight, xs,
  198. maxWidth = 750
  199. xs = ress.width / ress.height // 宽高比例
  200. if (ress.width > maxWidth) {
  201. canvasWidth = maxWidth // 这里是最大限制宽度
  202. canvasHeight = maxWidth / xs
  203. } else {
  204. canvasWidth = ress.width
  205. canvasHeight = ress.height
  206. }
  207. sizeCallback && sizeCallback({
  208. w: canvasWidth,
  209. h: canvasHeight
  210. })
  211. let canvas = uni.createCanvasContext(
  212. 'canvas');
  213. canvas.width = canvasWidth
  214. canvas.height = canvasHeight
  215. canvas.clearRect(0, 0, canvasWidth,
  216. canvasHeight);
  217. canvas.drawImage(ress.path, 0, 0,
  218. canvasWidth, canvasHeight)
  219. canvas.save();
  220. // 这里的画布drawImage是一种异步属性 可能存在未绘制全就执行了draw的问题 so添加延迟
  221. setTimeout(e => {
  222. // console.log('上传图片');
  223. canvas.draw(true, () => {
  224. uni.canvasToTempFilePath({
  225. canvasId: 'canvas',
  226. fileType: 'JPEG',
  227. destWidth: canvasWidth,
  228. destHeight: canvasHeight,
  229. quality: 0.7,
  230. success: function(
  231. canvasPath
  232. ) {
  233. let faileData = {
  234. tempFiles: [{
  235. name: res
  236. .tempFiles[
  237. 0
  238. ]
  239. .name ||
  240. ''
  241. }],
  242. tempFilePaths: [
  243. canvasPath
  244. .tempFilePath
  245. ]
  246. };
  247. uploadImg
  248. (data,
  249. faileData
  250. );
  251. },
  252. fail(
  253. err
  254. ) {
  255. console
  256. .log(
  257. err,
  258. 'err'
  259. );
  260. }
  261. })
  262. });
  263. }, 200)
  264. } catch (e) {
  265. console.log(e, '错误');
  266. //TODO handle the exception
  267. }
  268. }
  269. })
  270. })
  271. function uploadImg(data, res) {
  272. try {
  273. let {
  274. AUTH_TOKEN,
  275. Timestamp
  276. } = store.state.md5;
  277. let NONCE = randomString(12);
  278. let URL = store.state.baseURL + config.url;
  279. let MD5 = w_md5.hex_md5_32(Timestamp + NONCE + AUTH_TOKEN +
  280. URL);
  281. let tokenMD5 = `${Timestamp}|${NONCE}|${MD5}`;
  282. const time = (new Date()).getTime();
  283. // #ifdef H5
  284. const formData = {
  285. "policy": data.sign.policy,
  286. "OSSAccessKeyId": data.sign.accessid,
  287. 'success_action_status': 200,
  288. "signature": data.sign.signature,
  289. "key": config.file_name + '/' + time + res.tempFiles[0]
  290. .name
  291. }
  292. // #endif
  293. // #ifndef H5
  294. const formData = {
  295. "policy": data.sign.policy,
  296. "OSSAccessKeyId": data.sign.accessid,
  297. 'success_action_status': 200,
  298. "signature": data.sign.signature,
  299. "key": config.file_name + '/' + time + '.png'
  300. }
  301. // #endif
  302. // console.log(formData,'formData');
  303. const upFileObj = uni.uploadFile({
  304. url: data.sign.host, //仅为示例,非真实的接口地址
  305. filePath: res.tempFilePaths[0],
  306. formData,
  307. name: 'file',
  308. header: {
  309. "Authori-zation": 'Bearer ' + uni
  310. .getStorageSync('token'),
  311. "X-YD-Req-Token": tokenMD5,
  312. "Access-Control-Max-Age":-1
  313. },
  314. success: (suc) => {
  315. if (suc.statusCode == 200) {
  316. // #ifdef H5
  317. const imgurl = [{
  318. url: data.sign.host + '/' +
  319. config.file_name + '/' +
  320. time + res.tempFiles[0]
  321. .name
  322. }];
  323. // #endif
  324. // #ifndef H5
  325. const imgurl = [{
  326. url: data.sign.host + '/' +
  327. config.file_name + '/' +
  328. time + '.png'
  329. }];
  330. // #endif
  331. successCallback(imgurl)
  332. }
  333. uni.hideLoading()
  334. },
  335. file(res) {
  336. uni.hideLoading()
  337. // console.log(res, '图片上传错误');
  338. errorCallback(res)
  339. }
  340. });
  341. upFileObj.onProgressUpdate((re) => {
  342. Progress && Progress(re)
  343. console.log(re);
  344. })
  345. } catch (e) {
  346. uni.showModal({
  347. title: '错误',
  348. content: e.message,
  349. showCancel: false
  350. });
  351. }
  352. }
  353. },
  354. fail(err) {
  355. if (err.errCode == 0) {
  356. uni.showToast({
  357. title: '已取消',
  358. icon: "error"
  359. });
  360. } else if (err.errCode == 12) {
  361. uni.showToast({
  362. title: '已返回',
  363. icon: "error"
  364. });
  365. } else {
  366. console.log(err, '图片上传错误');
  367. uni.showToast({
  368. title: '请重新上传',
  369. icon: "error"
  370. });
  371. }
  372. uni.hideLoading()
  373. // reject(err)
  374. }
  375. })
  376. }, 100)
  377. } catch (e) {
  378. console.log('错误', 555);
  379. uni.hideLoading()
  380. uni.showToast({
  381. title: e.message,
  382. icon: "error"
  383. });
  384. reject(res)
  385. }
  386. }
  387. };
  388. export default service