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

OpzioneDefaultEffetto
locale'it-IT'Separatore decimale virgola
precision1Massimo 1 cifra decimale (2,4 KiB)
binarytrue1 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 }).
  • precision controlla solo le cifre massime: 1024 resta '1 KiB' senza decimali superflui.