Composables
useFileSize
Formatta e parsa dimensioni file in unità leggibili (B/KiB/MiB/GiB) con locale configurabile.
Panoramica
useFileSize espone helper per:
- Formattare bytes in stringa leggibile (
formatSize) - Parsare stringhe
"1 MB","500 KiB"in numero di bytes (parseSize) - Generare range testuali (
getSizeRange) e verificare appartenenza (isInSizeRange)
Firma
function useFileSize(config?: FileSizeConfig): {
formatSize: (bytes: number) => string
parseSize: (sizeStr: string) => number
getSizeRange: (min: number, max?: number) => string
isInSizeRange: (bytes: number, range: string) => boolean
}
interface FileSizeConfig {
locale?: string // default 'it-IT'
precision?: number // default 1 (max decimali)
binary?: boolean // default true → unità IEC (KiB/MiB), false → SI (KB/MB)
}
Configurazione di default
| Opzione | Default | Effetto |
|---|---|---|
locale | 'it-IT' | Separatore decimale virgola |
precision | 1 | Massimo 1 cifra decimale (2,4 KiB) |
binary | true | 1 KiB = 1024 B (IEC) invece di 1 KB = 1000 B (SI) |
formatSize
const { formatSize } = useFileSize()
formatSize(0) // '0 B'
formatSize(512) // '512 B'
formatSize(1024) // '1 KiB'
formatSize(2500) // '2,4 KiB'
formatSize(1_048_576) // '1 MiB'
formatSize(52_428_800) // '50 MiB'
formatSize(1_073_741_824) // '1 GiB'
Modalità SI (decimale):
const { formatSize } = useFileSize({ binary: false })
formatSize(1000) // '1 KB'
formatSize(1_500_000) // '1,5 MB'
parseSize
Converte una stringa formattata in bytes (case-insensitive). Lancia Error per formati invalidi.
const { parseSize } = useFileSize()
parseSize('500 B') // 500
parseSize('1 KB') // 1000
parseSize('1 KiB') // 1024
parseSize('2.5 MB') // 2_500_000
parseSize('2,5 MB') // ❌ Error: usa il punto decimale
Il parser distingue KB vs KiB dal suffisso
i: KB/MB/GB/TB = base 1000, KiB/MiB/GiB/TiB = base 1024.getSizeRange e isInSizeRange
Helper testuali pensati per filtri e label di range:
const { getSizeRange, isInSizeRange } = useFileSize()
getSizeRange(0, 1_000_000) // '0 B - 976,6 KiB'
getSizeRange(10_000_000) // '> 9,5 MiB'
// Range come stringa "min-max" in bytes
isInSizeRange(500_000, '0-1000000') // true
isInSizeRange(15_000_000, '10000000-') // true (no max)
isInSizeRange accetta un range serializzato come "min-max" o "min-" (no upper bound). I bytes devono essere un numero finito.
Esempio
<script setup lang="ts">
import { useFileSize } from '@pzeta/vue-attachment'
const { formatSize } = useFileSize({ precision: 2 })
</script>
<template>
<span>{{ formatSize(2_500_000) }}</span> <!-- '2,38 MiB' -->
</template>
Anteprima live
Note
- Default IEC con locale italiano: stringhe come
'2,4 KiB'. - Per formato SI standard (Mac, Linux):
useFileSize({ binary: false }). - Per locale anglosassone:
useFileSize({ locale: 'en-US', binary: false }). precisioncontrolla solo le cifre massime:1024resta'1 KiB'senza decimali superflui.