cómo obtener la ruta absoluta para archivos basados ​​en fid

13

¿Cómo puedo obtener la ruta absoluta para un archivo basado en el fid? Lo siento si esto es una repetición, hice una búsqueda pero no pude encontrar la respuesta.

Russ
fuente
Podría haber descubierto una forma de obtenerlo usando $ base_url + la ruta restante a los archivos + uri ¿es esta la mejor manera?
Russ

Respuestas:

35

Drupal 7

Este es un proceso de dos partes, usando file_load()yfile_create_url()

Primero, debe convertir el $ fid en un URI de Drupal:

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

Ahora, puedes convertir esto en una URL

$url = file_create_url($uri);

file_create_url()siempre crea una URL absoluta, ya sea usando el global $base_pathque ha definido o usando el que Drupal adivinó durante el arranque.

mpdonadio
fuente
1
Me sorprende que tenga que cargar el archivo solo para obtener la ruta, parece un desperdicio de recursos.
Russ
2
@Russ Está cargando el objeto de archivo, no el archivo en sí. También podría hacer un db_query para obtener la uri, pero trato de usar la API tanto como sea posible.
mpdonadio
Gracias, pensé que, solo pensé que habría una función limpia que podría devolverla en un solo paso. Tal vez algo a tener en cuenta en drupal 8.
Russ
1
En su ejemplo, tiene 'field_load ($ fid)', debería ser 'file_load ($ fid)'.
Steve Mulvihill
2
@SteveMulvihill Wow, buena captura. Más de cuatro años y 33 votos, y nadie se dio cuenta de eso.
mpdonadio
3

En Drupal 7 también puede usar la consulta MYSQL, si no desea cargar todos los campos del archivo

  $ fid = 1; // su ID de archivo
  $ uri = db_select ('file_managed', 'f')
    -> condición ('f.fid', $ fid, '=')
    -> campos ('f', matriz ('uri'))
    -> execute () -> fetchField ();
  echo file_create_url ($ uri);
inizio
fuente
3

Drupal 8

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

Ambos funcionan para mí en 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();
ProGrammar
fuente