cara mendapatkan path absolut untuk file berdasarkan fid
13
Bagaimana saya bisa mendapatkan path absolut untuk file berdasarkan fid? Maaf jika ini adalah pengulangan, saya melakukan pencarian tetapi tidak dapat menemukan jawabannya.
Pertama, Anda perlu mengubah $ fid menjadi URI Drupal:
$file = file_load($fid);
$uri = $file->uri;
Sekarang, Anda bisa mengubahnya menjadi URL
$url = file_create_url($uri);
file_create_url()selalu membuat URL absolut, baik menggunakan global $base_pathyang telah Anda tetapkan, atau menggunakan yang ditebak Drupal selama bootstrap.
Saya terkejut Anda harus memuat file hanya untuk mendapatkan jalan, sepertinya buang-buang sumber daya.
Russ
2
@Russ Ini memuat objek file, bukan file itu sendiri. Anda juga bisa melakukan db_query untuk mendapatkan uri, tetapi saya mencoba menggunakan API sebanyak mungkin.
mpdonadio
Terima kasih, saya pikir itu, hanya berpikir akan ada fungsi bersih yang bisa mengembalikannya dalam satu langkah. Mungkin sesuatu untuk dipertimbangkan dalam drupal 8.
Russ
1
Dalam contoh Anda, Anda memiliki 'field_load ($ fid)', seharusnya 'file_load ($ fid)'.
Steve Mulvihill
2
@SteveMulvihill Wow, tangkapan yang bagus. Empat + tahun dan 33 suara, dan tidak ada yang memperhatikan itu.
mpdonadio
3
Di Drupal 7 Anda juga dapat menggunakan permintaan MYSQL, jika Anda tidak ingin memuat semua bidang file
$ fid = 1; // ID file Anda
$ uri = db_select ('file_managed', 'f')
-> kondisi ('f.fid', $ fid, '=')
-> bidang ('f', array ('uri'))
-> execute () -> fetchField ();
echo 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();
Jawaban:
Drupal 7
Ini adalah proses dua bagian, menggunakan
file_load()
danfile_create_url()
Pertama, Anda perlu mengubah $ fid menjadi URI Drupal:
Sekarang, Anda bisa mengubahnya menjadi URL
file_create_url()
selalu membuat URL absolut, baik menggunakan global$base_path
yang telah Anda tetapkan, atau menggunakan yang ditebak Drupal selama bootstrap.sumber
Di Drupal 7 Anda juga dapat menggunakan permintaan MYSQL, jika Anda tidak ingin memuat semua bidang file
sumber
Drupal 8
sumber
Keduanya berfungsi untuk saya di Drupal 8:
sumber