як отримати абсолютний шлях для файлів на основі fid


13

Як я можу отримати абсолютний шлях до файлу на основі fid? Вибачте, якщо це повторення, я здійснив пошук, але не зміг знайти відповідь.


Я, можливо, придумав спосіб отримати це за допомогою $ base_url + решта шляху до файлів + урі, це найкращий спосіб?
Russ

Відповіді:


35

Drupal 7

Це процес у двох частинах, використовуючи file_load()таfile_create_url()

По-перше, вам потрібно перетворити $ fid в URI Drupal:

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

Тепер ви можете перетворити це на URL-адресу

$url = file_create_url($uri);

file_create_url()завжди створює абсолютну URL-адресу, або використовуючи визначену $base_pathвами глобальну , або використовуючи ту, про яку Друпал здогадався під час завантаження.


1
Я здивований, що вам доведеться завантажувати файл лише для того, щоб отримати шлях, здається, марна трата ресурсів.
Русс

2
@Russ Це завантаження файлового об'єкта, а не самого файлу. Ви також можете зробити db_query, щоб отримати урі, але я намагаюся максимально використовувати API.
mpdonadio

Дякую, я подумав, що, просто думав, що буде чиста функція, яка може повернути її за один крок. Можливо, щось розглянути в друпалі 8.
Русс

1
У вашому прикладі у вас є "field_load ($ fid)", це має бути "file_load ($ fid)".
Стів Мулвіхіл

2
@SteveMulvihill Нічого собі, приємний улов. Чотири + роки та 33 голоси, і ніхто цього не помітив.
mpdonadio

4

Друпал 8

$file = \Drupal\file\Entity\File::load($file_id);
$uri = $file->getFileUri();
$url = \Drupal\Core\Url::fromUri(file_create_url($uri))->toString();

3

У Drupal 7 ви також можете використовувати запит MYSQL, якщо ви не хочете завантажувати всі поля файлу

  $ fid = 1; // ваш ідентифікатор файлу
  $ uri = db_select ('file_managed', 'f')
    -> умова ('f.fid', $ fid, '=')
    -> поля ('f', масив ('uri'))
    -> Execute () -> fetchField ();
  echo file_create_url ($ uri);

1

Вони обидва працюють для мене в 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();
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.