Comment puis-je obtenir la taille d'un fichier joint?

35

J'utilise le code de modèle suivant pour afficher les liens en pièce jointe:

$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);
}

mais après le lien, j'ai besoin d'afficher la taille du fichier. Comment puis-je faire ceci?

Je suppose que je pourrais déterminer le chemin du fichier (via wp_upload_dir()et un substr()de wp_get_attachment_url()) et appeler, filesize()mais cela semble compliqué, et je me demande simplement s'il existe une méthode intégrée à WordPress.

Bobby Jack
la source
Fait intéressant, il n’existe aucune fonctionnalité dans le backend permettant d’afficher la taille d’un fichier, que ce soit en détail ou dans la liste. Ticket n ° 8739
hakre

Réponses:

43

Autant que je sache, WordPress n'a rien d'intégré à cela, je voudrais juste faire:

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

Joe Hoyle
la source
Ah, ça a l'air bien mieux que de déconner, wp_upload_dir()etc.!
Bobby Jack
J'ai besoin d'obtenir seulement la taille du fichier d'une pièce jointe. J'ai utilisé get_the_ID () dans post_parent. mais pas d'utilisation.
KarSho
10

J'ai déjà utilisé cela dans functions.php pour afficher la taille du fichier dans un format facilement lisible:

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))));}

Et puis dans mon template:

echo getSize('insert reference to file here');
davemac
la source
8
Il n'est pas nécessaire de créer une nouvelle fonction. WP a deux d'entre eux intégrés dans le noyau. size_format()etwp_convert_bytes_to_hr()
Brady
8
On dirait que wp_convert_bytes_to_hr () est désormais obsolète en faveur de size_format ()
davemac
5

Je ferais :

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

Ou avec une taille lisible comme 423.82 KB

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

Références : get_attached_file () , filesize () , size_format ()

Remarque: Définissez votre$attachment_id

l2aelba
la source
3

Pour trouver la taille d'un fichier ajouté via le plugin de champs personnalisés, j'ai fait ceci:

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

Assurez-vous simplement que vous définissez la "Valeur de retour" du champ personnalisé sur "Objet de fichier".

William Schroeder McKinley
la source
3

Il existe une solution plus simple, qui consiste à obtenir des tailles de fichiers lisibles par l’homme.

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

echo $attachment_meta['filesizeHumanReadable'];
Zoltan Kiraly
la source
theres une wp_ funktion pour tout ;-)
Thomas Fellinger
Devrait être la réponse acceptée
utilisateur1676224
1

Je cherchais la même chose et ai trouvé cette solution intégrée 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'];
}

Voir plus à wp_get_attachment_metadata()

Vayu
la source
2
La question concerne la taille du fichier en nombre d'octets et non en dimensions d'image.
Rarst
Doh, ça me manque de lire. :-)
Vayu
1

Pour l’audio au moins, la taille du fichier est enregistrée en tant que "métadonnées".

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

Ce n'est peut- être pas le cas pour les images et les vidéos.

le rédacteur
la source