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.

Russ
la source
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.

mpdonadio
la source
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);
inizio
la source
3

Drupal 8

$file = \Drupal\file\Entity\File::load($file_id);
$uri = $file->getFileUri();
$url = \Drupal\Core\Url::fromUri(file_create_url($uri))->toString();
Kevin howbrook
la source
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();
ProGrammar
la source