您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 

150 行
4.2 KiB

  1. import API from '@/api/config.js'
  2. import config from '@/utils/config.js'
  3. import { getClient, getNonce, getVersion, guid } from '@/utils/util.js'
  4. let BASE_URL = config.BASE_URL
  5. // #ifdef H5
  6. BASE_URL = '/api'
  7. // #endif
  8. export function uploadImage(filePath, fileInfo = {}) {
  9. const token = uni.getStorageSync('token')
  10. let mac = uni.getStorageSync('mac')
  11. if (!mac) {
  12. mac = uni.getSystemInfoSync().deviceId || guid()
  13. uni.setStorageSync('mac', mac)
  14. }
  15. const { timeStr, nonce } = getNonce()
  16. const { version, version_code } = getVersion()
  17. return new Promise((resolve, reject) => {
  18. uni.uploadFile({
  19. url: `${BASE_URL}${API.INTERFACE_FILE_UPLOAD}`,
  20. filePath,
  21. name: 'file',
  22. header: {
  23. token,
  24. timestr: timeStr,
  25. nonce
  26. },
  27. formData: {
  28. token,
  29. mac,
  30. client: getClient(),
  31. source: uni.getStorageSync('source') || '',
  32. version,
  33. version_code,
  34. upload_type: 1,
  35. file_name: fileInfo.name || ''
  36. },
  37. success: (res) => {
  38. let data = {}
  39. try {
  40. data = typeof res.data === 'string' ? JSON.parse(res.data) : res.data
  41. } catch (e) {
  42. reject({ code: 1, msg: '上传结果解析失败' })
  43. return
  44. }
  45. if (data.code === 0) {
  46. resolve(data)
  47. } else {
  48. reject(data)
  49. }
  50. },
  51. fail: (e) => reject({ code: 1, msg: e.errMsg || '上传失败' })
  52. })
  53. })
  54. }
  55. /**
  56. * 把原图作为 multipart 文件直接提交给某个业务接口(不先传 CDN 再由后端回源下载一次)。
  57. * 公共参数与鉴权头和 utils/request.js 保持一致。
  58. * @param {string} url 接口路径,取自 api/config.js
  59. * @param {string} filePath 本地临时文件路径
  60. * @param {object} params 业务参数
  61. * @param {string} failMsg 解析失败时的兜底文案
  62. */
  63. function uploadWithForm(url, filePath, params = {}, failMsg = '上传结果解析失败') {
  64. const token = uni.getStorageSync('token')
  65. const uid = uni.getStorageSync('open_id')
  66. let mac = uni.getStorageSync('mac')
  67. if (!mac) {
  68. mac = uni.getSystemInfoSync().deviceId || guid()
  69. uni.setStorageSync('mac', mac)
  70. }
  71. const { timeStr, nonce } = getNonce()
  72. const { version, version_code } = getVersion()
  73. const formData = {
  74. token,
  75. uid,
  76. mac,
  77. base_timestamp: parseInt(Date.now() / 1000),
  78. client: getClient(),
  79. source: uni.getStorageSync('source') || '',
  80. client_ios: uni.getSystemInfoSync().platform === 'ios' ? 1 : 0,
  81. version,
  82. version_code,
  83. ...params
  84. }
  85. Object.keys(formData).forEach((key) => {
  86. if (formData[key] === '' || formData[key] === undefined || formData[key] === null) {
  87. delete formData[key]
  88. } else if (typeof formData[key] !== 'string') {
  89. formData[key] = String(formData[key])
  90. }
  91. })
  92. return new Promise((resolve, reject) => {
  93. uni.uploadFile({
  94. url: `${BASE_URL}${url}`,
  95. filePath,
  96. name: 'file',
  97. header: {
  98. token,
  99. timestr: timeStr,
  100. nonce
  101. },
  102. formData,
  103. success: (res) => {
  104. let data = {}
  105. try {
  106. data = typeof res.data === 'string' ? JSON.parse(res.data) : res.data
  107. } catch (e) {
  108. reject({ code: 1, msg: failMsg })
  109. return
  110. }
  111. if (data.code === 0) {
  112. resolve(data)
  113. return
  114. }
  115. reject(data)
  116. },
  117. fail: (e) => reject({ code: 1, msg: e.errMsg || '照片上传失败,请重试' })
  118. })
  119. })
  120. }
  121. /**
  122. * 证件照制作
  123. */
  124. export function createIdPhoto(filePath, params = {}) {
  125. return uploadWithForm(API.INTERFACE_IDPHOTO_POST_CREATE, filePath, params, '制作结果解析失败')
  126. }
  127. /**
  128. * 老照片修复/上色:提交后立即返回任务,结果由 /oldphoto/getdetail 轮询
  129. */
  130. export function createOldPhoto(filePath, params = {}) {
  131. return uploadWithForm(API.INTERFACE_OLDPHOTO_POST_CREATE, filePath, params, '提交结果解析失败')
  132. }
  133. /**
  134. * 形象照/职业照/写真:提交后立即返回任务(含 1~4 个子任务),结果由 /portrait/getdetail 轮询
  135. */
  136. export function createPortrait(filePath, params = {}) {
  137. return uploadWithForm(API.INTERFACE_PORTRAIT_POST_CREATE, filePath, params, '提交结果解析失败')
  138. }