vue.ts 1.9 KB

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