comment obtenir le chemin absolu des fichiers basé sur fid


13

Comment puis-je obtenir le chemin absolu d'un fichier basé sur la fidélité? Désolé si c'est une répétition, j'ai fait une recherche mais je n'ai pas pu trouver la réponse.


J'aurais peut-être trouvé un moyen de l'obtenir en utilisant $ base_url + le chemin restant vers les fichiers + uri est-ce la meilleure façon?
Russ

Réponses:


35

Drupal 7

Il s'agit d'un processus en deux parties, utilisant file_load()etfile_create_url()

Tout d'abord, vous devez transformer le $ fid en URI Drupal:

$file = file_load($fid);
$uri = $file->uri;

Maintenant, vous pouvez transformer cela en URL

$url = file_create_url($uri);

file_create_url()crée toujours une URL absolue, soit en utilisant le global $base_pathque vous avez défini, soit en utilisant celui que Drupal a deviné lors du bootstrap.


1
Je suis surpris que vous ayez à charger le fichier juste pour obtenir le chemin d'accès, semble être un gaspillage de ressources.
Russ

2
@Russ Il charge l'objet fichier, pas le fichier lui-même. Vous pouvez également faire une requête db_query pour obtenir l'URI, mais j'essaie d'utiliser l'API autant que possible.
mpdonadio

Merci, je me suis dit que je pensais juste qu'il y aurait une fonction propre qui pourrait la retourner en une seule étape. Peut-être quelque chose à considérer dans drupal 8.
Russ

1
Dans votre exemple, vous avez 'field_load ($ fid)', ce devrait être 'file_load ($ fid)'.
Steve Mulvihill

2
@SteveMulvihill Wow, belle prise. Quatre ans et plus et 33 votes, et personne ne l'a remarqué.
mpdonadio

3

Dans Drupal 7, vous pouvez également utiliser la requête MYSQL, si vous ne voulez pas charger tous les champs du fichier

  $ fid = 1; // votre identifiant de fichier
  $ uri = db_select ('file_managed', 'f')
    -> condition ('f.fid', $ fid, '=')
    -> champs ('f', tableau ('uri'))
    -> execute () -> fetchField ();
  echo file_create_url ($ uri);

3

Drupal 8

$file = \Drupal\file\Entity\File::load($file_id);
$uri = $file->getFileUri();
$url = \Drupal\Core\Url::fromUri(file_create_url($uri))->toString();

1

Ceux-ci travaillent tous les deux pour moi dans Drupal 8:

// top of file
use Drupal\file\Entity\File;
use Drupal\Core\Url;

// load the file object from some file id
$file_object = File::load(123);

// way 1
$file_uri = $file_object->uri->value;
$file_url = file_create_url($file_uri);

// way 2
$file_uri = $file_object->getFileUri();
$file_url = Url::fromUri(file_create_url($file_uri))->toString();
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.