Tamaños de archivos legibles por humanos en Laravel (KB, MB, GB)

  • Publicado el 21 abril, 2025
  • Palabras: 372

Aprenda a convertir tamaños de archivo en bytes a tamaños legibles mediante el método "Number::fileSize". Por ejemplo, mostraremos cómo convertir "1024" a "1 KB".

Tamaños de archivos legibles por humanos en Laravel (KB, MB, GB)

Puede que en ocasiones quieras mostrar el tamaño de los archivos a tus usuarios en un formato legible.

Por ejemplo, podrías tener un área en tu aplicación que permita a los usuarios descargar archivos. En lugar de mostrar el tamaño de un archivo descargable en bytes, podrías preferir mostrarlo en KB, MB, GB, etc. Seamos sinceros, es mucho más fácil entender un tamaño de archivo de "2,5 MB" que de "2 500 000 bytes", especialmente para usuarios sin conocimientos técnicos.

 

#Requisitos previos

Antes de comenzar, vale la pena señalar que los ejemplos tratados en este artículo requieren que esté instalada la extensión PHP intl.

 

#Tamaños de archivos legibles por humanos en Laravel

Para mostrar el tamaño de los archivos en un formato legible, podemos usar la clase IlluminateSupportNumber de Laravel. Podemos llamar al método fileSize y este convertirá el número de bytes a un formato legible:

 

use Illuminate\Support\Number;
 
Number::fileSize(bytes: 1024); // 1 KB
Number::fileSize(bytes: 2135); // 2 KB
Number::fileSize(bytes: 2_000_000); // 2 MB
Number::fileSize(bytes: 3_048_000); // 3 MB
Number::fileSize(bytes: 4_000_000_000); // 4 GB

 

De forma predeterminada, el método fileSize redondea el tamaño del archivo a un número entero. En algunos casos, esto puede ser adecuado, pero en otros, puede que prefiera mostrar el tamaño del archivo con un número fijo de decimales.

Para ello, podemos pasar un argumento de precisión al método fileSize:

 

use Illuminate\Support\Number;
 
Number::fileSize(bytes: 1024, precision: 2); // 1.00 KB
Number::fileSize(bytes: 2135, precision: 2); // 2.08 KB
Number::fileSize(bytes: 2_000_000, precision: 2); // 1.91 MB
Number::fileSize(bytes: 3_048_000, precision: 2); // 2.91 MB
Number::fileSize(bytes: 4_000_000_000, precision: 2); // 3.73 GB

 

En nuestro ejemplo, usamos el argumento de precisión para especificar que siempre queremos mostrar el tamaño del archivo con 2 decimales.

Si bien esto puede darnos una representación más precisa del tamaño del archivo, a veces puede añadir ceros finales innecesarios. Por ejemplo, en lugar de mostrar "1 KB", mostrará "1,00 KB".

Para eliminar los decimales de los números enteros, podemos pasar un argumento de precisión máxima al método de la siguiente manera:

 

use Illuminate\Support\Number;
 
Number::fileSize(bytes: 1024, maxPrecision: 2); // 1 KB
Number::fileSize(bytes: 2135, maxPrecision: 2); // 2.08 KB
Number::fileSize(bytes: 2_000_000, maxPrecision: 2); // 1.91 MB
Number::fileSize(bytes: 3_048_000, maxPrecision: 2); // 2.91 MB
Number::fileSize(bytes: 4_000_000_000, maxPrecision: 2); // 3.73 GB

 

En el ejemplo anterior, especificamos que queremos mostrar el tamaño del archivo con un máximo de 2 decimales. Por lo tanto, si el tamaño del archivo es un número entero, se mostrará sin decimales.

 

#Ejemplo práctico

Para ayudarte a comprender cómo usar el método fileSize en tu aplicación, aquí tienes un ejemplo de cómo obtener el tamaño legible de un archivo.

Supongamos que tenemos una imagen example-image.png almacenada en nuestro directorio local storage/app/private y que usamos el disco del sistema de archivos local.

Si quisiéramos obtener el tamaño legible de esta imagen, podríamos hacer lo siguiente:

 

use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Number;
 
$humanFriendlySize = Number::fileSize(
    bytes: Storage::fileSize('example-image.png'),
);

 

Supongamos que el tamaño del archivo es de 51 620 bytes. La variable $humanFriendlySize contendría ahora la cadena "50 KB".

Antonio Jenaro
Antonio Jenaro

Web Developer

Archivado en:

Inicia la conversación

Hazte miembro de Antonio Jenaro para comenzar a comentar.

Regístrate ahora

¿Ya estás registrado? Inicia sesión