UNPKG

ice.fo.utils

Version:

116 lines (93 loc) 3.08 kB
export function downloadString (text, filename = `${+new Date()}.txt`) { const element = document.createElement('a') element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text)) element.setAttribute('download', filename) element.style.display = 'none' document.body.appendChild(element) element.click() document.body.removeChild(element) } export function makeIconForExtension (ext) { switch (ext) { case 'png': case 'jpg': case 'jpeg': return 'fas fa-file-image' case 'pdf': return 'far fa-file-pdf' case 'mp4': case 'mov': return 'far fa-file-video' default: return 'fas fa-folder' } } export function makeFileInfo (data) { if (!data) { return {} } const { fileName = '', fileSize, storePath } = data const actualFileSize = fileSize ? fileSize / (1024 * 1024) : 0 const fileExtension = fileName.split('.').pop() const link = storePath && storePath.startsWith('/file') ? storePath : `/file/${storePath}` const icon = makeIconForExtension(fileExtension) return { icon, size: `${actualFileSize.toFixed(2)}MB`, link, name: fileName, url: storePath || '', } } // Doc: https://stackoverflow.com/questions/18299806/how-to-check-file-mime-type-with-javascript-before-upload export function checkIsImageVideoFile (blob) { return new Promise((resolve) => { const fileReader = new FileReader() fileReader.onloadend = function (e) { const arr = (new Uint8Array(e.target.result)).subarray(0, 4) let fileHeader = '' for (let i = 0; i < arr.length; i++) { fileHeader += arr[i].toString(16) } const validCode = ['89504e47', '47494638', 'ffd8ffe0', 'ffd8ffe1', 'ffd8ffe2', '66747970', '00014', '3026B275'] const isValiddMime = validCode.includes(fileHeader) resolve(isValiddMime) } fileReader.readAsArrayBuffer(blob) }) } export function readFileAsBase64 (file) { return new Promise((resolve) => { const reader = new FileReader() reader.readAsDataURL(file) reader.addEventListener('load', (e) => { const base64 = e.target.result const result = { src: base64, size: file.size, name: file.name, } resolve(result) }) }) } export function isImageFile (file) { return (file.type && file.type.includes('image')) || (file.name && file.name.match(/\.(gif|jpe?g|png)$/i)) } export function extractFileNameFromUrl (url) { const splitUrl = /\/([^/]+)\/?$/.exec(url) return splitUrl != null ? splitUrl[1] : '' } export function generateFileObject (file, serverApi) { if (!file || !serverApi) { return null } if (Array.isArray(file)) { return file.map(item => generateFileObject(item, serverApi)) } const url = typeof file === 'string' ? file : file.url || file.file || '' const pathname = url.substring(serverApi.length) const downloadUrl = `${serverApi}/file${pathname}` const name = file.name || extractFileNameFromUrl(url) return { url, downloadUrl, name, ...file } }