como obter o caminho absoluto para arquivos com base no fid


13

Como posso obter o caminho absoluto para um arquivo com base no fid? Desculpe se isso é uma repetição, fiz uma pesquisa, mas não consegui encontrar a resposta.


Eu poderia ter descoberto uma maneira de obtê-lo usando o $ base_url + o caminho restante para arquivos + uri é este o melhor caminho?
Russ

Respostas:


35

Drupal 7

Este é um processo em duas partes, usando file_load()efile_create_url()

Primeiro, você precisa transformar o $ fid em um URI do Drupal:

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

Agora, você pode transformar isso em um URL

$url = file_create_url($uri);

file_create_url()sempre cria uma URL absoluta, usando a global $base_pathque você definiu ou usando a que Drupal adivinhou durante a inicialização.


1
Estou surpreso que você tenha que carregar o arquivo apenas para pegar o caminho, parece um desperdício de recursos.
Russ

2
@ Russ Está carregando o objeto de arquivo, não o próprio arquivo. Você também pode fazer um db_query para obter a uri, mas tento usar a API o máximo possível.
mpdonadio

Obrigado, imaginei que, apenas pensei que haveria uma função limpa que poderia devolvê-la em uma única etapa. Talvez algo a considerar em Drupal 8.
Russ

1
No seu exemplo, você tem 'field_load ($ fid)', ele deve ser 'file_load ($ fid)'.
Steve Mulvihill

2
@SteveMulvihill Uau, boa captura. Quatro + anos e 33 votos, e ninguém percebeu isso.
mpdonadio

3

No Drupal 7, você também pode usar a consulta MYSQL, se não quiser carregar todos os campos do arquivo

  $ fid = 1; // seu ID de arquivo
  $ uri = db_select ('gerenciado por arquivo', 'f')
    -> condição ('f.fid', $ fid, '=')
    -> campos ('f', array ('uri'))
    -> execute () -> fetchField ();
  eco 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

Ambos estão trabalhando para mim no 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();
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.