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.
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);
// 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();
Respostas:
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:
Agora, você pode transformar isso em um URL
file_create_url()
sempre cria uma URL absoluta, usando a global$base_path
que você definiu ou usando a que Drupal adivinhou durante a inicialização.fonte
No Drupal 7, você também pode usar a consulta MYSQL, se não quiser carregar todos os campos do arquivo
fonte
Drupal 8
fonte
Ambos estão trabalhando para mim no Drupal 8:
fonte