วิธีรับพา ธ สัมบูรณ์สำหรับไฟล์ตาม fid


13

ฉันจะหาพา ธ สัมบูรณ์สำหรับไฟล์ตาม fid ได้อย่างไร? ขออภัยถ้าเป็นการทำซ้ำฉันทำการค้นหา แต่ไม่สามารถหาคำตอบได้


ฉันอาจคิดวิธีที่จะได้รับโดยใช้ $ base_url + เส้นทางที่เหลือไปยังไฟล์ + uri เป็นวิธีที่ดีที่สุดหรือไม่
รัส

คำตอบ:


35

Drupal 7

นี่เป็นกระบวนการสองส่วนโดยใช้file_load()และfile_create_url()

ก่อนอื่นคุณต้องเปลี่ยน $ fid ให้เป็น Drupal URI:

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

ตอนนี้คุณสามารถเปลี่ยนให้เป็น URL ได้

$url = file_create_url($uri);

file_create_url()สร้าง URL แบบสัมบูรณ์เสมอไม่ว่าจะใช้โกลบอล$base_pathที่คุณกำหนดไว้หรือใช้URL ที่ Drupal คาดเดาในระหว่างการบู๊ต


1
ฉันประหลาดใจที่คุณต้องโหลดไฟล์เพื่อให้ได้เส้นทางดูเหมือนว่าเป็นการสิ้นเปลืองทรัพยากร
รัส

2
@Russ มันกำลังโหลดออบเจ็กต์ไฟล์ไม่ใช่ตัวไฟล์เอง คุณสามารถทำ db_query เพื่อรับ uri ได้ แต่ฉันพยายามใช้ API ให้มากที่สุด
mpdonadio

ขอบคุณฉันคิดว่าแค่คิดว่าจะมีฟังก์ชั่นใหม่ที่สามารถส่งคืนได้ในขั้นตอนเดียว อาจเป็นสิ่งที่ต้องพิจารณาใน drupal 8
รัส

1
ในตัวอย่างของคุณคุณมี 'field_load ($ fid)' ควรเป็น 'file_load ($ fid)'
Steve Mulvihill

2
@SteveMulvihill ว้าวจับได้ดี สี่ปีและ 33 คะแนนโหวตและไม่มีใครสังเกตเห็นว่า
mpdonadio


3

ใน Drupal 7 คุณสามารถใช้แบบสอบถามแบบ MySQL ได้หากคุณไม่ต้องการโหลดฟิลด์ทั้งหมดของไฟล์

  $ fid = 1; // ID ไฟล์ของคุณ
  $ uri = db_select ('file_managed', 'f')
    -> เงื่อนไข ('f.fid', $ fid, '=')
    -> ฟิลด์ ('f', อาร์เรย์ ('uri'))
    -> รัน () -> fetchField ();
  echo file_create_url ($ uri);

1

สิ่งเหล่านี้ใช้ได้กับฉันใน 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();
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.