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.