index.ts 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. // @ts-nocheck
  2. import {platform} from '../platform'
  3. /**
  4. * base64转路径
  5. * @param {Object} base64
  6. */
  7. export function base64ToPath(base64: string, filename?: string):Promise<string> {
  8. const [, format] = /^data:image\/(\w+);base64,/.exec(base64) || [];
  9. console.log('format', format)
  10. return new Promise((resolve, reject) => {
  11. // #ifdef MP
  12. const fs = uni.getFileSystemManager()
  13. //自定义文件名
  14. if (!filename && !format) {
  15. reject(new Error('ERROR_BASE64SRC_PARSE'))
  16. }
  17. // const time = new Date().getTime();
  18. const name = filename || `${new Date().getTime()}.${format}`;
  19. let pre = platform()
  20. const filePath = `${pre.env.USER_DATA_PATH}/${name}`
  21. fs.writeFile({
  22. filePath,
  23. data: base64.split(',')[1],
  24. encoding: 'base64',
  25. success() {
  26. resolve(filePath)
  27. },
  28. fail(err) {
  29. console.error(err)
  30. reject(err)
  31. }
  32. })
  33. // #endif
  34. // #ifdef H5
  35. // mime类型
  36. let mimeString = base64.split(',')[0].split(':')[1].split(';')[0];
  37. //base64 解码
  38. let byteString = atob(base64.split(',')[1]);
  39. //创建缓冲数组
  40. let arrayBuffer = new ArrayBuffer(byteString.length);
  41. //创建视图
  42. let intArray = new Uint8Array(arrayBuffer);
  43. for (let i = 0; i < byteString.length; i++) {
  44. intArray[i] = byteString.charCodeAt(i);
  45. }
  46. resolve(URL.createObjectURL(new Blob([intArray], {
  47. type: mimeString
  48. })))
  49. // #endif
  50. // #ifdef APP-PLUS
  51. const bitmap = new plus.nativeObj.Bitmap('bitmap' + Date.now())
  52. bitmap.loadBase64Data(base64, () => {
  53. if (!filename && !format) {
  54. reject(new Error('ERROR_BASE64SRC_PARSE'))
  55. }
  56. // const time = new Date().getTime();
  57. const name = filename || `${new Date().getTime()}.${format}`;
  58. const filePath = `_doc/uniapp_temp/${name}`
  59. bitmap.save(filePath, {},
  60. () => {
  61. bitmap.clear()
  62. resolve(filePath)
  63. },
  64. (error) => {
  65. bitmap.clear()
  66. reject(error)
  67. })
  68. }, (error) => {
  69. bitmap.clear()
  70. reject(error)
  71. })
  72. // #endif
  73. })
  74. }