index.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. export const blobToJson = (blob) => {
  2. return new Promise((resolve, reject) => {
  3. const reader = new FileReader()
  4. reader.onload = function (event) {
  5. const jsonString = event.target.result
  6. const jsonObject = JSON.parse(jsonString)
  7. resolve(jsonObject)
  8. }
  9. reader.onerror = function (error) {
  10. reject(error)
  11. }
  12. reader.readAsText(blob)
  13. })
  14. }
  15. // 判断是图片还是视频
  16. export const checkIsImage = (url) => {
  17. var link = new URL(url)
  18. var path = link.pathname
  19. var extension = path.split('.').pop().toLowerCase()
  20. var imageExtensions = ['jpg', 'jpeg', 'gif', 'png', 'jfif']
  21. var videoExtensions = ['mp4', 'wmv', 'avi', 'mov']
  22. // 图片
  23. if (imageExtensions.includes(extension)) {
  24. return true
  25. }
  26. // 视频
  27. if (videoExtensions.includes(extension)) {
  28. return false
  29. }
  30. return null
  31. }
  32. // 预览文件
  33. import { Base64 } from 'js-base64'
  34. export const previewFile = (url) => {
  35. const baseUrl = import.meta.env.VITE_PREVIEW_URL
  36. window.open(`${baseUrl}/onlinePreview?url=${encodeURIComponent(Base64.encode(url))}`)
  37. }
  38. export const generateUUID = () => {
  39. var d = new Date().getTime()
  40. if (window.performance && typeof window.performance.now === "function") {
  41. d += performance.now(); //use high-precision timer if available
  42. }
  43. var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
  44. var r = (d + Math.random() * 16) % 16 | 0
  45. d = Math.floor(d / 16)
  46. return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16)
  47. })
  48. return uuid.replace(/-/g, "")
  49. }
  50. // 64转file
  51. export const base64ToBlob = (code) => {
  52. let parts = code.split(';base64,')
  53. let contentType = parts[0].split(':')[1]
  54. let raw = window.atob(parts[1])
  55. let rawLength = raw.length
  56. let uInt8Array = new Uint8Array(rawLength)
  57. for (let i = 0; i < rawLength; ++i) {
  58. uInt8Array[i] = raw.charCodeAt(i)
  59. }
  60. return new Blob([uInt8Array], {
  61. type: contentType
  62. })
  63. }
  64. import axios from 'axios'
  65. export const downloadImgVideo = async (content, fileName) => {
  66. try {
  67. const response = await axios.get(content, { responseType: 'blob' });
  68. const suffix = content.split('.').pop()
  69. const url = window.URL.createObjectURL(new Blob([response.data]));
  70. const link = document.createElement('a');
  71. link.style.display = 'none';
  72. link.href = url;
  73. link.download = fileName + `.${suffix}`
  74. document.body.appendChild(link);
  75. link.click();
  76. window.URL.revokeObjectURL(url);
  77. } catch (error) {
  78. console.error('Error downloading file:', error);
  79. }
  80. }
  81. export const downloadBase64 = async (content, fileName) => {
  82. let aLink = document.createElement('a')
  83. let blob = base64ToBlob(content)
  84. aLink.download = fileName + '.png'
  85. aLink.href = URL.createObjectURL(blob)
  86. aLink.click()
  87. }
  88. export const DPR = () => {
  89. // 获取设备dpi
  90. if (window.devicePixelRatio && window.devicePixelRatio > 1) {
  91. return window.devicePixelRatio * 2
  92. }
  93. // 直接返回高像素比
  94. return 8
  95. }
  96. // 文件下载
  97. export const getBlob = (url) => {
  98. return new Promise(resolve => {
  99. const xhr = new XMLHttpRequest()
  100. xhr.open('GET', url, true)
  101. xhr.responseType = 'blob'
  102. xhr.onload = () => {
  103. if (xhr.status === 200) resolve(xhr.response)
  104. }
  105. xhr.send()
  106. })
  107. }
  108. export const saveAs = (blob, filename) => {
  109. var link = document.createElement('a')
  110. link.href = window.URL.createObjectURL(blob)
  111. link.download = filename
  112. link.click()
  113. }
  114. // 计算空格
  115. export const spaces = (num = 6) => {
  116. return '\xa0'.repeat(num)
  117. }
  118. // 过滤对象空属性
  119. export const removeEmptyProperties = (obj) => {
  120. return Object.fromEntries(
  121. Object.entries(obj).filter(([key, value]) => value !== null && value !== undefined && value !== '' && (Array.isArray(value) ? value.length > 0 : true))
  122. )
  123. }