index.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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']
  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. export const downloadBase64 = (content, fileName) => {
  51. const base64ToBlob = function (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. let aLink = document.createElement('a')
  65. let blob = base64ToBlob(content)
  66. aLink.download = fileName + '.png'
  67. aLink.href = URL.createObjectURL(blob)
  68. aLink.click()
  69. }
  70. export const DPR = () => {
  71. // 获取设备dpi
  72. if (window.devicePixelRatio && window.devicePixelRatio > 1) {
  73. return window.devicePixelRatio * 2
  74. }
  75. // 直接返回高像素比
  76. return 8
  77. }
  78. // 文件下载
  79. export const getBlob = (url) => {
  80. return new Promise(resolve => {
  81. const xhr = new XMLHttpRequest()
  82. xhr.open('GET', url, true)
  83. xhr.responseType = 'blob'
  84. xhr.onload = () => {
  85. if (xhr.status === 200) resolve(xhr.response)
  86. }
  87. xhr.send()
  88. })
  89. }
  90. export const saveAs = (blob, filename) => {
  91. var link = document.createElement('a')
  92. link.href = window.URL.createObjectURL(blob)
  93. link.download = filename
  94. link.click()
  95. }