ice.fo.utils
Version:
116 lines (93 loc) • 3.08 kB
JavaScript
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 }
}