¿Cómo obtengo el tamaño de un archivo adjunto?

18 ago 2010, 12:11:08
Vistas: 55.4K
Votos: 40

Estoy usando el siguiente código de plantilla para mostrar enlaces de archivos adjuntos:

$args = array(
    'post_type' => 'attachment',
    'numberposts' => -1,
    'post_status' => null,
    'post_parent' => $main_post_id
);

$attachments = get_posts($args);

foreach ($attachments as $attachment)
{
    the_attachment_link($attachment->ID, false);
}

pero después del enlace necesito mostrar el tamaño del archivo. ¿Cómo puedo hacer esto?

Supongo que podría determinar la ruta del archivo (usando wp_upload_dir() y un substr() de wp_get_attachment_url()) y llamar a filesize(), pero eso parece desordenado, y me pregunto si hay algún método incorporado en WordPress.

1
Comentarios

Curiosamente, no hay funcionalidad en el backend para mostrar el tamaño de un archivo, ya sea en los detalles o en la lista. Ticket #8739

hakre hakre
19 ago 2010 09:44:00
Todas las respuestas a la pregunta 9
3
49

Hasta donde sé, WordPress no tiene nada incorporado para esto, simplemente haría:

filesize( get_attached_file( $attachment->ID ) );

18 ago 2010 12:17:00
Comentarios

Ah - ¡eso se ve mucho mejor que lidiar con wp_upload_dir() y demás!

Bobby Jack Bobby Jack
18 ago 2010 12:18:52

necesito obtener solo el tamaño del archivo de un adjunto de publicación. Usé get_the_ID() en post_parent. pero no sirve.

KarSho KarSho
28 mar 2013 13:20:16

Esto es bueno, pero ten en cuenta que filesize lanzará una advertencia si get_attached_file devuelve false. Deberías añadir una comprobación para asegurarte de que get_attached_file devuelve un archivo que existe.

Alex Standiford Alex Standiford
7 dic 2019 14:53:45
0
13

Yo haría:

$attachment_filesize = filesize( get_attached_file( $attachment_id ) );

O con tamaño legible como 423.82 KB

$attachment_filesize = size_format( filesize( get_attached_file( $attachment_id ) ), 2 );

Referencias: get_attached_file(), filesize(), size_format()

Nota: Define tu $attachment_id

27 mar 2017 14:01:25
2
10

He utilizado esto antes en functions.php para mostrar el tamaño del archivo en un formato fácilmente legible:

function getSize($file){
$bytes = filesize($file);
$s = array('b', 'Kb', 'Mb', 'Gb');
$e = floor(log($bytes)/log(1024));
return sprintf('%.2f '.$s[$e], ($bytes/pow(1024, floor($e))));}

Y luego en mi plantilla:

echo getSize('inserta la referencia al archivo aquí');
19 ago 2010 06:16:18
Comentarios

No es necesario crear una nueva función. WordPress tiene dos de ellas integradas en el núcleo. size_format() y wp_convert_bytes_to_hr()

Scott Scott
27 oct 2011 17:01:33

Parece que wp_convert_bytes_to_hr() ahora ha quedado obsoleta en favor de size_format()

davemac davemac
14 may 2012 05:35:11
2

Existe una solución más sencilla para obtener tamaños de archivo legibles para humanos.

$attachment_id  = $attachment->ID;
$attachment_meta = wp_prepare_attachment_for_js($attachment_id);

echo $attachment_meta['filesizeHumanReadable'];
17 ene 2017 10:39:51
Comentarios

hay una función wp_ para todo ;-)

Thomas Fellinger Thomas Fellinger
6 nov 2017 11:13:49

Debería ser la respuesta aceptada

user1676224 user1676224
16 ene 2019 18:34:57
0

Para encontrar el tamaño de un archivo añadido a través del plugin de campos personalizados, hice esto:

$fileObject = get_field( 'file ');
$fileSize   = size_format( filesize( get_attached_file( $fileObject['id'] ) ) );

Solo asegúrate de configurar el "Valor de Retorno" del campo personalizado como "Objeto de Archivo".

21 ago 2015 20:33:54
2

Estaba buscando lo mismo y encontré esta solución integrada de WordPress.

$args = array(
    'post_type' => 'attachment',
    'numberposts' => -1,
    'post_status' => null,
    'post_parent' => $main_post_id
);

$attachments = get_posts($args);

foreach ($attachments as $attachment)
{
    $attachment_id = $attachment->ID;
    $image_metadata = wp_get_attachment_metadata( $attachment_id );
    the_attachment_link($attachment->ID, false);
    echo the_attachment_link['width'];
    echo the_attachment_link['height'];
}

Ver más en wp_get_attachment_metadata()

5 jul 2011 17:17:04
Comentarios

La pregunta es sobre el tamaño del archivo en términos de número de bytes, no de dimensiones de la imagen.

Rarst Rarst
5 jul 2011 17:26:26

¡Vaya, lo leí mal! :-)

Vayu Vayu
26 ago 2011 15:57:05
0

Para el audio, al menos, el tamaño del archivo se guarda como "metadatos".

$metadata = wp_get_attachment_metadata( $attachment_id );
echo $metadata['filesize'];

Esto puede que no sea el caso para imágenes y videos.

27 may 2017 16:47:52
3

Obtener el tamaño del archivo de imagen en WordPress:

$query_images_args = array(
    'post_type' => 'attachment',
    'post_mime_type' => 'image',
    'post_status' => 'inherit',
    'posts_per_page' => 10,
);

$query_images = new WP_Query($query_images_args);

foreach ($query_images->posts as $image) {
    $img_atts = wp_get_attachment_image_src($image->ID, $default);
    $img = get_headers($img_atts[0], 1);
    $size = $img["Content-Length"]/1024;
    echo round($size);

}
27 oct 2021 09:55:11
Comentarios

Bienvenido a wpse! ¿En qué es mejor este enfoque que la respuesta aceptada? Considera añadir más explicación sobre cómo/por qué este enfoque es mejor o cómo resuelve el problema del OP.

Buttered_Toast Buttered_Toast
27 oct 2021 10:42:48

Tu respuesta podría mejorarse con información adicional de apoyo. Por favor [edita] para añadir más detalles, como citas o documentación, para que otros puedan confirmar que tu respuesta es correcta. Puedes encontrar más información sobre cómo escribir buenas respuestas en el centro de ayuda.

User User
27 oct 2021 10:53:37

Esto parece mucho superior, es decir, usar get_headers vs. la función filesize de php. Esta ruta con get_headers no lanza el error 'stat failed' si falta el tamaño del archivo.

Leora Deans Leora Deans
22 ene 2022 01:20:23
0

Función simple para obtener el tamaño del archivo adjunto por su ID, similar a otra respuesta aquí pero con un poco de verificación de errores. También hay un parámetro adicional para especificar el número de decimales a devolver:

function tm_get_attachment_size($attachment_id, $decimals) {
    $file = get_attached_file( $attachment_id );
    return $file ? size_format( filesize($file), $decimals ) : 0;
}

Por ejemplo, digamos que tengo un ID de adjunto de 99: tm_get_attachment_size(99, 1) devolvería '1.4 MB'.

3 mar 2021 23:15:06