index.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. // +----------------------------------------------------------------------
  2. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  3. // +----------------------------------------------------------------------
  4. // | Copyright (c) https://www.crmeb.com All rights reserved.
  5. // +----------------------------------------------------------------------
  6. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  7. // +----------------------------------------------------------------------
  8. // | Author: CRMEB Team <admin@crmeb.com>
  9. // +----------------------------------------------------------------------
  10. function getLocalFilePath(path) {
  11. if (path.indexOf('_www') === 0 || path.indexOf('_doc') === 0 || path.indexOf('_documents') === 0 || path.indexOf('_downloads') === 0) {
  12. return path
  13. }
  14. if (path.indexOf('file://') === 0) {
  15. return path
  16. }
  17. if (path.indexOf('/storage/emulated/0/') === 0) {
  18. return path
  19. }
  20. if (path.indexOf('/') === 0) {
  21. var localFilePath = plus.io.convertAbsoluteFileSystem(path)
  22. if (localFilePath !== path) {
  23. return localFilePath
  24. } else {
  25. path = path.substr(1)
  26. }
  27. }
  28. return '_www/' + path
  29. }
  30. export function pathToBase64(path) {
  31. return new Promise(function(resolve, reject) {
  32. if (typeof window === 'object' && 'document' in window) {
  33. if (typeof FileReader === 'function') {
  34. var xhr = new XMLHttpRequest()
  35. xhr.open('GET', path, true)
  36. xhr.responseType = 'blob'
  37. xhr.onload = function() {
  38. if (this.status === 200) {
  39. let fileReader = new FileReader()
  40. fileReader.onload = function(e) {
  41. resolve(e.target.result)
  42. }
  43. fileReader.onerror = reject
  44. fileReader.readAsDataURL(this.response)
  45. }
  46. }
  47. xhr.onerror = reject
  48. xhr.send()
  49. return
  50. }
  51. var canvas = document.createElement('canvas')
  52. var c2x = canvas.getContext('2d')
  53. var img = new Image
  54. img.onload = function() {
  55. canvas.width = img.width
  56. canvas.height = img.height
  57. c2x.drawImage(img, 0, 0)
  58. resolve(canvas.toDataURL())
  59. canvas.height = canvas.width = 0
  60. }
  61. img.onerror = reject
  62. img.src = path
  63. return
  64. }
  65. if (typeof plus === 'object') {
  66. plus.io.resolveLocalFileSystemURL(getLocalFilePath(path), function(entry) {
  67. entry.file(function(file) {
  68. var fileReader = new plus.io.FileReader()
  69. fileReader.onload = function(data) {
  70. resolve(data.target.result)
  71. }
  72. fileReader.onerror = function(error) {
  73. reject(error)
  74. }
  75. fileReader.readAsDataURL(file)
  76. }, function(error) {
  77. reject(error)
  78. })
  79. }, function(error) {
  80. reject(error)
  81. })
  82. return
  83. }
  84. if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) {
  85. wx.getFileSystemManager().readFile({
  86. filePath: path,
  87. encoding: 'base64',
  88. success: function(res) {
  89. resolve('data:image/png;base64,' + res.data)
  90. },
  91. fail: function(error) {
  92. reject(error)
  93. }
  94. })
  95. return
  96. }
  97. reject(new Error('not support'))
  98. })
  99. }
  100. export function base64ToPath(base64) {
  101. return new Promise(function(resolve, reject) {
  102. if (typeof window === 'object' && 'document' in window) {
  103. base64 = base64.split(',')
  104. var type = base64[0].match(/:(.*?);/)[1]
  105. var str = atob(base64[1])
  106. var n = str.length
  107. var array = new Uint8Array(n)
  108. while (n--) {
  109. array[n] = str.charCodeAt(n)
  110. }
  111. return resolve((window.URL || window.webkitURL).createObjectURL(new Blob([array], { type: type })))
  112. }
  113. var extName = base64.match(/data\:\S+\/(\S+);/)
  114. if (extName) {
  115. extName = extName[1]
  116. } else {
  117. reject(new Error('base64 error'))
  118. }
  119. var fileName = Date.now() + '.' + extName
  120. if (typeof plus === 'object') {
  121. var bitmap = new plus.nativeObj.Bitmap('bitmap' + Date.now())
  122. bitmap.loadBase64Data(base64, function() {
  123. var filePath = '_doc/uniapp_temp/' + fileName
  124. bitmap.save(filePath, {}, function() {
  125. bitmap.clear()
  126. resolve(filePath)
  127. }, function(error) {
  128. bitmap.clear()
  129. reject(error)
  130. })
  131. }, function(error) {
  132. bitmap.clear()
  133. reject(error)
  134. })
  135. return
  136. }
  137. if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) {
  138. var filePath = wx.env.USER_DATA_PATH + '/' + fileName
  139. wx.getFileSystemManager().writeFile({
  140. filePath: filePath,
  141. data: base64.replace(/^data:\S+\/\S+;base64,/, ''),
  142. encoding: 'base64',
  143. success: function() {
  144. resolve(filePath)
  145. },
  146. fail: function(error) {
  147. reject(error)
  148. }
  149. })
  150. return
  151. }
  152. reject(new Error('not support'))
  153. })
  154. }