fid tabanlı dosyalar için mutlak yol nasıl elde edilir


13

Fid'e dayalı bir dosya için mutlak yolu nasıl alabilirim? Üzgünüm, bu bir tekrar ise, bir arama yaptım ama cevabı bulamadım.


Ben $ base_url + dosyaları için kalan yol + uri kullanarak almak için bir yol bulmuş olabilir bu en iyi yoludur?
Russ

Yanıtlar:


35

Drupal 7

Bu iki parçalı bir işlemdir file_load()vefile_create_url()

İlk olarak, $ fid değerini Drupal URI'ye dönüştürmeniz gerekir:

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

Şimdi bunu bir URL'ye dönüştürebilirsiniz

$url = file_create_url($uri);

file_create_url()daima $base_pathtanımladığınız global'i kullanarak veya Drupal'ın önyükleme sırasında tahmin ettiği URL'yi kullanarak mutlak bir URL oluşturur .


1
Sadece yolu almak için dosyayı yüklemek zorunda sürpriz, kaynak israfı gibi görünüyor.
Russ

2
@Russ Dosyanın kendisini değil dosya nesnesini yüklüyor. Ayrıca uri almak için bir db_query yapabilir, ancak API mümkün olduğunca kullanmaya çalışın.
mpdonadio

Teşekkürler, sadece bir adımda geri dönebilecek temiz bir fonksiyon olacağını düşündüm. Belki drupal 8'de dikkate alınması gereken bir şey.
Russ

1
Örneğinizde 'field_load ($ fid)' var, 'file_load ($ fid)' olmalıdır.
Steve Mulvihill

2
@SteveMulvihill Vay canına, hoş yakaladın. Dört yıl ve 33 oy ve kimse bunu fark etmedi.
mpdonadio

4

Drupal 8

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

3

Dosyanın tüm alanlarını yüklemek istemiyorsanız, Drupal 7'de MYSQL sorgusunu da kullanabilirsiniz

  $ fid = 1; // dosya kimliğiniz
  $ uri = db_select ('dosya_yönetimi', 'f')
    -> koşul ('f.fid', $ fid, '=')
    -> alanlar ('f', dizi ('uri'))
    ->) (yürütmek -> fetchField ();
  echo file_create_url ($ uri);

1

Bunların ikisi de Drupal 8'de benim için çalışıyor:

// 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();
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.