40 lines
1.0 KiB
TypeScript
40 lines
1.0 KiB
TypeScript
import dayjs from 'dayjs'
|
|
|
|
export const bytesToSize = (
|
|
bytes: number | string | undefined | null,
|
|
decimals = 2,
|
|
) => {
|
|
if (typeof bytes === 'undefined' || bytes === null) {
|
|
bytes = 0
|
|
}
|
|
if (typeof bytes === 'string') {
|
|
bytes = Number(bytes)
|
|
}
|
|
if (Number.isNaN(bytes)) {
|
|
return 'Unknown'
|
|
}
|
|
if (bytes === 0) {
|
|
return '0 Bytes'
|
|
}
|
|
const k = 1024
|
|
const dm = decimals < 0 ? 0 : decimals
|
|
const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']
|
|
const i = Math.floor(Math.log(bytes) / Math.log(k))
|
|
return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]
|
|
}
|
|
|
|
export const formatDate = (date: number | string | Date) => {
|
|
return dayjs(date).format('YYYY-MM-DD HH:mm:ss')
|
|
}
|
|
|
|
export const previewUrlToFile = async (url: string) => {
|
|
return fetch(url)
|
|
.then((res) => res.blob())
|
|
.then((blob) => {
|
|
const type = blob.type
|
|
const extension = type.split('/')[1]
|
|
const file = new File([blob], `preview.${extension}`, { type })
|
|
return file
|
|
})
|
|
}
|