feat: add filepicker package
This commit is contained in:
56
packages/filepicker/src/utils.ts
Normal file
56
packages/filepicker/src/utils.ts
Normal file
@@ -0,0 +1,56 @@
|
||||
export async function readFile(file: File): Promise<Uint8Array> {
|
||||
const reader = new FileReader()
|
||||
reader.readAsArrayBuffer(file)
|
||||
return new Promise((resolve) => {
|
||||
reader.onload = (readerEvent) => {
|
||||
const target = readerEvent.target as FileReader
|
||||
const content = target.result as ArrayBuffer
|
||||
resolve(new Uint8Array(content))
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
export function parseFileName(fileName: string): {
|
||||
name: string
|
||||
ext: string
|
||||
} {
|
||||
const pattern = /(?:\.([^.]+))?$/
|
||||
const extMatches = pattern.exec(fileName)
|
||||
const ext = extMatches?.[1] || ''
|
||||
const name = fileName.includes('.') ? fileName.substring(0, fileName.lastIndexOf('.')) : fileName
|
||||
|
||||
return { name, ext }
|
||||
}
|
||||
|
||||
export function saveFile(name: string, bytes: Uint8Array): void {
|
||||
const link = document.createElement('a')
|
||||
const blob = new Blob([bytes], {
|
||||
type: 'text/plain;charset=utf-8',
|
||||
})
|
||||
link.href = window.URL.createObjectURL(blob)
|
||||
link.setAttribute('download', name)
|
||||
document.body.appendChild(link)
|
||||
link.click()
|
||||
link.remove()
|
||||
window.URL.revokeObjectURL(link.href)
|
||||
}
|
||||
|
||||
const BYTES_IN_ONE_KILOBYTE = 1_024
|
||||
const BYTES_IN_ONE_MEGABYTE = 1_048_576
|
||||
const BYTES_IN_ONE_GIGABYTE = 1_073_741_824
|
||||
|
||||
export function formatSizeToReadableString(bytes: number): string {
|
||||
let size = bytes
|
||||
let unit = 'B'
|
||||
if (bytes >= BYTES_IN_ONE_GIGABYTE) {
|
||||
size = bytes / BYTES_IN_ONE_GIGABYTE
|
||||
unit = 'GB'
|
||||
} else if (bytes >= BYTES_IN_ONE_MEGABYTE) {
|
||||
size = bytes / BYTES_IN_ONE_MEGABYTE
|
||||
unit = 'MB'
|
||||
} else if (bytes >= BYTES_IN_ONE_KILOBYTE) {
|
||||
size = bytes / BYTES_IN_ONE_KILOBYTE
|
||||
unit = 'KB'
|
||||
}
|
||||
return `${Number.isInteger(size) ? size : size.toFixed(2)} ${unit}`
|
||||
}
|
||||
Reference in New Issue
Block a user