come ottenere il percorso assoluto per i file basato su fid


13

Come posso ottenere il percorso assoluto per un file basato sul fid? Scusa se questa è una ripetizione, ho fatto una ricerca ma non sono riuscito a trovare la risposta.


Avrei potuto trovare un modo per ottenerlo usando $ base_url + il percorso rimanente ai file + uri è questo il modo migliore?
Russ,

Risposte:


35

Drupal 7

Questo è un processo in due parti, usando file_load()efile_create_url()

Innanzitutto, devi trasformare $ fid in un URI Drupal:

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

Ora puoi trasformarlo in un URL

$url = file_create_url($uri);

file_create_url()crea sempre un URL assoluto, sia usando il globale $base_pathche hai definito, sia usando quello che Drupal ha indovinato durante il bootstrap.


1
Sono sorpreso che devi caricare il file solo per ottenere il percorso, sembra uno spreco di risorse.
Russ,

2
@Russ Sta caricando l'oggetto file, non il file stesso. Potresti anche fare un db_query per ottenere l'uri, ma provo a usare l'API il più possibile.
mpdonadio

Grazie, ho pensato che avrei pensato che ci sarebbe stata una funzione pulita che avrebbe potuto restituirla in un solo passaggio. Forse qualcosa da considerare in Drupal 8.
Russ,

1
Nel tuo esempio hai 'field_load ($ fid)', dovrebbe essere 'file_load ($ fid)'.
Steve Mulvihill,

2
@SteveMulvihill Wow, bella cattura. Quattro + anni e 33 voti, e nessuno l'ha notato.
mpdonadio

3

In Drupal 7 puoi anche usare la query MYSQL, se non vuoi caricare tutti i campi del file

  $ fid = 1; // il tuo ID file
  $ uri = db_select ('file_managed', 'f')
    -> condizione ('f.fid', $ fid, '=')
    -> campi ('f', array ('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

Entrambi funzionano per me in 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();
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.