export const blobToJson = (blob) => { return new Promise((resolve, reject) => { const reader = new FileReader() reader.onload = function (event) { const jsonString = event.target.result const jsonObject = JSON.parse(jsonString) resolve(jsonObject) } reader.onerror = function (error) { reject(error) } reader.readAsText(blob) }) } // 判断是图片还是视频 export const checkIsImage = (url) => { var link = new URL(url) var path = link.pathname var extension = path.split('.').pop().toLowerCase() var imageExtensions = ['jpg', 'jpeg', 'gif', 'png', 'jfif'] var videoExtensions = ['mp4', 'wmv', 'avi', 'mov'] // 图片 if (imageExtensions.includes(extension)) { return true } // 视频 if (videoExtensions.includes(extension)) { return false } return null } // 预览文件 import { Base64 } from 'js-base64' export const previewFile = (url) => { const baseUrl = import.meta.env.VITE_PREVIEW_URL window.open(`${baseUrl}/onlinePreview?url=${encodeURIComponent(Base64.encode(url))}`) } export const generateUUID = () => { var d = new Date().getTime() if (window.performance && typeof window.performance.now === "function") { d += performance.now(); //use high-precision timer if available } var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { var r = (d + Math.random() * 16) % 16 | 0 d = Math.floor(d / 16) return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16) }) return uuid.replace(/-/g, "") } // 64转file export const base64ToBlob = (code) => { let parts = code.split(';base64,') let contentType = parts[0].split(':')[1] let raw = window.atob(parts[1]) let rawLength = raw.length let uInt8Array = new Uint8Array(rawLength) for (let i = 0; i < rawLength; ++i) { uInt8Array[i] = raw.charCodeAt(i) } return new Blob([uInt8Array], { type: contentType }) } import axios from 'axios' export const downloadImgVideo = async (content, fileName) => { try { const response = await axios.get(content, { responseType: 'blob' }); const suffix = content.split('.').pop() const url = window.URL.createObjectURL(new Blob([response.data])); const link = document.createElement('a'); link.style.display = 'none'; link.href = url; link.download = fileName + `.${suffix}` document.body.appendChild(link); link.click(); window.URL.revokeObjectURL(url); } catch (error) { console.error('Error downloading file:', error); } } export const downloadBase64 = async (content, fileName) => { let aLink = document.createElement('a') let blob = base64ToBlob(content) aLink.download = fileName + '.png' aLink.href = URL.createObjectURL(blob) aLink.click() } export const DPR = () => { // 获取设备dpi if (window.devicePixelRatio && window.devicePixelRatio > 1) { return window.devicePixelRatio * 2 } // 直接返回高像素比 return 8 } // 文件下载 export const getBlob = (url) => { return new Promise(resolve => { const xhr = new XMLHttpRequest() xhr.open('GET', url, true) xhr.responseType = 'blob' xhr.onload = () => { if (xhr.status === 200) resolve(xhr.response) } xhr.send() }) } export const saveAs = (blob, filename) => { var link = document.createElement('a') link.href = window.URL.createObjectURL(blob) link.download = filename link.click() } // 计算空格 export const spaces = (num = 6) => { return '\xa0'.repeat(num) } // 过滤对象空属性 export const removeEmptyProperties = (obj) => { return Object.fromEntries( Object.entries(obj).filter(([key, value]) => value !== null && value !== undefined && value !== '' && (Array.isArray(value) ? value.length > 0 : true)) ) }