Holen Sie sich den realen Pfad einer Datei


11

Ich erstelle ein Excel-Lesemodul in Drupal 8. Ich möchte den tatsächlichen Pfad einer Datei zum Lesen aus einem Pfad wie public: //2016-03/Places.xls abrufen.

Welche Funktion sollte ich aufrufen, um den tatsächlichen Pfad einer Datei abzurufen?



4
Zum Lesen mit was? Dieser Pfad funktioniert mit fast allem, z. B. funktioniert file_get_contents ('public: // ...') einwandfrei.
Berdir

1
Ich habe die Antwort in Bezug auf Drupal 8 erhalten: \ Drupal :: service ('file_system') -> realpath ('public: //2016-03/Places_2.xlsx')
Nisam

1
Poste es als Antwort und akzeptiere es als Lösung. Das wird anderen bei der gleichen Frage helfen.
Aram Boyajyan

1
Ich hatte eine ähnliche Situation, ging aber schließlich zu file_create_url, weil es managed files (These are files that have either been uploaded by users or were generated automatically (for example through CSS aggregation))undshipped files (those outside of the files directory, which ship as part of Drupal core or contributed modules or themes)
usernameabc

Antworten:


16

Schließlich bekam ich die Lösung durch Graben von Drupal-Code.
Wir können den realen Pfad oder den absoluten Pfad mithilfe des Dienstes file_system ermitteln .

$absolute_path = \Drupal::service('file_system')->realpath('public://2016-03/Places_2.xlsx');

4
Sind diese für Dateien, die über Drupal hochgeladen werden? Was passiert, wenn sie extern gehostet werden? The use of this method is discouraged, because it does not work for remote URIs. Except in rare cases, URIs should not be manually resolved.Erwähnt wird die Dokumentation für FileSystem :: realpath
usernameabc

13

@Nisam Antwort war richtig, aber jetzt ist es veraltet: Funktion drupal_realpath

Veraltet

in Drupal 8.0.x-dev wird vor Drupal 9.0.0 entfernt. Verwenden Sie \ Drupal \ Core \ File \ FileSystem :: realpath ().

Sie sollten also FileSystem :: realpath verwenden .

Beispiel:

$file = File::load($file_id);
$uri = $file->getFileUri();
$stream_wrapper_manager = \Drupal::service('stream_wrapper_manager')->getViaUri($uri);
$file_path = $stream_wrapper_manager->realpath();
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.