wie man den absoluten Pfad für Dateien basierend auf fid erhält

13

Wie kann ich den absoluten Pfad für eine Datei basierend auf der FID erhalten? Es tut mir leid, wenn dies eine Wiederholung ist, ich habe eine Suche durchgeführt, konnte jedoch keine Antwort finden.

Russ
quelle
Ich hätte vielleicht einen Weg gefunden, wie ich es mit der $ base_url + dem verbleibenden Pfad zu Dateien + uri bekommen kann. Ist dies der beste Weg?
Russ

Antworten:

35

Drupal 7

Dies ist ein zweiteiliger Prozess mit file_load()undfile_create_url()

Zuerst müssen Sie das $ fid in einen Drupal-URI verwandeln:

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

Jetzt können Sie daraus eine URL machen

$url = file_create_url($uri);

file_create_url()Erstellt immer eine absolute URL, entweder mit der von $base_pathIhnen definierten globalen oder mit der, die Drupal während des Bootstraps erraten hat.

mpdonadio
quelle
1
Ich bin überrascht, dass Sie die Datei laden müssen, nur um den Pfad zu erhalten, scheint eine Verschwendung von Ressourcen.
Russ
2
@Russ Es wird das Dateiobjekt geladen, nicht die Datei selbst. Sie könnten auch eine db_query ausführen, um die URI abzurufen, aber ich versuche, die API so oft wie möglich zu verwenden.
mpdonadio
Vielen Dank, dachte ich, es gäbe eine saubere Funktion, die es in einem Schritt zurückgeben könnte. Vielleicht etwas zu beachten in Drupal 8.
Russ
1
In Ihrem Beispiel haben Sie 'field_load ($ fid)', es sollte 'file_load ($ fid)' sein.
Steve Mulvihill
2
@SteveMulvihill Wow, schöner Fang. Vier + Jahre und 33 Stimmen, und niemand hat das bemerkt.
mpdonadio
3

In Drupal 7 können Sie auch MYSQL-Abfragen verwenden, wenn Sie nicht alle Felder der Datei laden möchten

  $ fid = 1; // Ihre Datei-ID
  $ uri = db_select ('file_managed', 'f')
    -> Bedingung ('f.fid', $ fid, '=')
    -> Felder ('f', Array ('uri'))
    -> execute () -> fetchField ();
  echo file_create_url ($ uri);
inizio
quelle
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
quelle
1

Diese beiden arbeiten für mich 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();
ProGrammar
quelle