Во-первых, вам нужно превратить $ fid в URI Drupal:
$file = file_load($fid);
$uri = $file->uri;
Теперь вы можете превратить это в URL
$url = file_create_url($uri);
file_create_url()всегда создает абсолютный URL, либо используя глобальный, $base_pathкоторый вы определили, либо используя тот, который Drupal угадал во время начальной загрузки.
Я удивлен, что вам нужно загрузить файл только для того, чтобы получить путь, похоже, пустая трата ресурсов.
Расс
2
@Russ загружает объект файла, а не сам файл. Вы также можете сделать db_query для получения URI, но я стараюсь использовать API как можно больше.
mpdonadio
Спасибо, я подумал, что просто подумал, что будет чистая функция, которая сможет вернуть ее за один шаг. Может быть, что-то, чтобы рассмотреть в Drupal 8.
Расс
1
В вашем примере у вас есть 'field_load ($ fid)', это должно быть 'file_load ($ fid)'.
Стив Малвихилл
2
@ SteveMulvihill Вау, хороший улов. Четыре + года и 33 голоса, и никто этого не заметил.
mpdonadio
3
В Drupal 7 вы также можете использовать запрос MYSQL, если вы не хотите загружать все поля файла
// top of fileuseDrupal\file\Entity\File;useDrupal\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();
Ответы:
Drupal 7
Это процесс , из двух частей, с использованием
file_load()
иfile_create_url()
Во-первых, вам нужно превратить $ fid в URI Drupal:
Теперь вы можете превратить это в URL
file_create_url()
всегда создает абсолютный URL, либо используя глобальный,$base_path
который вы определили, либо используя тот, который Drupal угадал во время начальной загрузки.источник
В Drupal 7 вы также можете использовать запрос MYSQL, если вы не хотите загружать все поля файла
источник
Drupal 8
источник
Они оба работают для меня в Drupal 8:
источник