Làm thế nào để có được đường dẫn tuyệt đối cho các tệp dựa trên fid


13

Làm thế nào tôi có thể có được đường dẫn tuyệt đối cho một tập tin dựa trên fid? Xin lỗi nếu điều này lặp lại, tôi đã tìm kiếm nhưng không thể tìm thấy câu trả lời.


Tôi có thể đã tìm ra một cách để có được nó bằng cách sử dụng $ base_url + đường dẫn còn lại đến các tệp + uri đây có phải là cách tốt nhất không?
Nga

Câu trả lời:


35

Drupal 7

Đây là một quá trình gồm hai phần, sử dụng file_load()file_create_url()

Trước tiên, bạn cần biến $ fid thành URI Drupal:

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

Bây giờ, bạn có thể biến điều này thành một URL

$url = file_create_url($uri);

file_create_url()luôn tạo một URL tuyệt đối, bằng cách sử dụng toàn cục $base_pathmà bạn đã xác định hoặc sử dụng URL mà Drupal đã đoán trong khi khởi động.


1
Tôi ngạc nhiên khi bạn phải tải tập tin chỉ để có được đường dẫn, có vẻ như là một sự lãng phí tài nguyên.
Nga

2
@Russ Nó đang tải đối tượng tệp, không phải chính tệp. Bạn cũng có thể thực hiện db_query để lấy uri, nhưng tôi cố gắng sử dụng API càng nhiều càng tốt.
mpdon Arena

Cảm ơn, tôi đoán rằng, chỉ cần nghĩ rằng sẽ có một chức năng sạch có thể trả lại nó trong một bước. Có lẽ một cái gì đó để xem xét trong drupal 8.
Russ

1
Trong ví dụ của bạn, bạn có 'field_load ($ fid)', nó phải là 'file_load ($ fid)'.
Steve Mulvihill

2
@SteveMulvihill Wow, bắt tốt đẹp. Bốn + năm và 33 phiếu, và không ai nhận thấy điều đó.
mpdon Arena

3

Trong Drupal 7, bạn cũng có thể sử dụng truy vấn MYSQL, nếu bạn không muốn tải tất cả các trường của tệp

  $ fid = 1; // ID tệp của bạn
  $ uri = db_select ('file_managed', 'f')
    -> điều kiện ('f.fid', $ fid, '=')
    -> các trường ('f', mảng ('uri'))
    -> thực thi () -> fetchField ();
  echo tập tin_create_url ($ uri);

3

Drupal 8

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

1

Cả hai đều hoạt động với tôi trong 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();
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.